设计模式-策略模式

使用继承时,定义父类为抽象类,同时在父类中实现一个公共的方法。所有继承该父类的子类。都有该方法。只要修改该父类的这个公共方法,会影响所有的子类。根据不同的需求,假如子类的该操作是同样的流程这样没有问题。但是在有些情况下,这个父类的公共方法只是该方法的一个抽象,具体实现在子类中。各个子类有自己实现方式。这样在父类中实现方法,一旦修改就会影响所有继承该父类的子类。所谓的溢出效应 就是指的是这个。假如只是在父类中定义方法,每个子类都要分别实现,即使假如有两个子类的该方法是同样的操作。这样无疑又增加了工作量和代码的复杂度。

策略模式指的是:把类的行为抽出来。不同的行为封装成不同的interface .针对一个行为的根据需求 假如有几个实现的话。那么每个实现就implements对应的interface。这样 不同的行为,同一行为不同的实现。可以完全独立。形成多策略。 举个栗子: 一个人的行为有:吃和睡 。吃,有人喜欢吃 萝卜,有人喜欢吃青菜。睡有人喜欢睡地板,有人喜欢睡床。 定义吃接口:

public interface EatBehavior{
    void eat();
}

封装不同的吃行为:

public class EatLuoBoBehavior implements EatBehavior{
    @Override
    public void eat(){
        System.out.println("eat luobo");
    } 
}
public class EatQingCaiBehavior implements EatBehavior{
    @Override
    public void eat(){
        System.out.println("eat qing cai ");
    } 
}

定义睡接口

public interface SleepBehavior{
    void sleep();
}

封装不同的睡行为

public class SleepDiBanBehavior implements SleepBehavior{
    @Override
    public void sleep(){
        System.out.println("sleep di ban");
    } 
}

public class SleepBedBehavior implements SleepBehavior{
    @Override
    public void sleep(){
        System.out.println("sleep bed");
    } 
}

好了 现在行为封装好了。

我们再实现一个 people的超类。在这个超类里面把不同的行为对象。 行为对象的值具体由具体的实例来赋值。

public abstract class People{
    
        EatBehavior eatBehavior;
        SleepBehavior sleepBehavior;
        
        public void eat(){
            eatBehavior.eat();
        }
        
         public void sleep(){
            sleepBehavior.sleep();
        }
        
        public void SetEatBehavior(EatBehavior eatBehavior){
            this.eatBehavior = eatBehavior;
        }
    public void SetSleepBehavior(SleepBehavior sleepBehavior){
            this.sleepBehavior= sleepBehavior;
        }

}

好了,现在封装一个策略模式为:一个喜欢吃萝卜 睡在地板上的人

public class LikeLuoBoAndDiBanPerson externds Person{
    public LikeLuoBoAndDiBanPerson(){
        eatBehavior = new EatLuoBoBehavior (); //父类类型的子类对象
        sleepBehavior = new SleepDiBanBehavior ;
    }
}

基于上面的这个栗子。可以封装多种行为模式的person。任意组合。 总结:把类的变化的行为 抽象成:接口+实现。好处就是在新增加行为时 简单方便,行为类的复用性好。组合起来方便。

转载于:https://my.oschina.net/nxxYqmvPOvsfH/blog/1793244

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值