Java设计模式(二)-策略设计模式

一、简单实例代码

// 1、创建接口1个 FlyBehavior
public interface FlyBehavior {
    void fly();
}
//2、创建接口实现类2个 FlyNoWay、FlyRocketPowered
public class FlyNoWay implements FlyBehavior {
    public void fly() {
        System.out.println("我不会飞翔,你知道了把,不要再问了");
    }
}
public class FlyRocketPowered  implements FlyBehavior {
    public void fly() {
        System.out.println("我拥有火箭的飞行能力");
    }
}

//3、创建抽象父类
@Data
public abstract class Duck {
    /**
     * 接口类型的行为变量
     * 实列变量在运行时持有特定行为的引用
     */
    FlyBehavior flyBehavior;// 每个鸭子都会引用实现FlyBehavior接口的对象
    /**
     * 飞翔
     * 鸭子对象不亲自处理呱呱叫的行为,而是委托给flyBehavior引用的时候
     */
    public void performFly() {
        flyBehavior.fly();
    } 
}
//4、创建Duck的子类 MallardDuck 
public class MallardDuck extends Duck {
    /**
     * 重写构造方法,伴随动作指定接口的具体实现对象
     */
    public MallardDuck(){
        flyBehavior = new FlyNoWay();
    }
}
//5、main方法测试
public void testTwo(){
        Duck duck = new MallardDuck();
        duck.performFly();
        // 在运行时改变鸭子的能力,细节拉满
        duck.flyBehavior = new FlyRocketPowered();
        duck.performFly();
    }

二、说明

*  1、列子总结:
*   1-1、方法抽离出来成接口
*   1-2、使用不同的实现类实现接口
*   1-3、抽象父类引用接口
*   1-4、抽象类子类调用接口方法时指向具体的接口实现类
*  2、策略设计模式总结
*   2-1、定义:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 
*   2-2、原则一:封装变化,找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
*   2-3、原则二:多用组合,少用继承。 多用接口进行组合,少用类继承。针对接口编程,而不是针对实现编程,针对接口编程, 可以封装多个继承接口的具体类,从而使一些方法有不同的功能。鸭子类不需要知道飞行和叫的具体实现的逻辑了
*   2-4、原则三:为交互对象之间的松耦合设计而努力
*   2-5、设计模式优点:弹性大、运行时动态地改变行为

参考资料 Java设计模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值