码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2018-07-24 20:25:27      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:imp   oid   背景   system   his   可变   inter   rdd   display   

背景介绍:

/**策略设计模式的原理解释:
duck 类(固定不变有叫与显示的方法)作为基类是变化很少的封装出来
而可变的就以组合的方式(注入接口) 然后通过多态的实现来完成。
这样以后还需要增加不同类型的鸭子以及不同的飞行就不需要改变原有duck的代码以及之前写好的代码
*/
public
abstract class Duck { // 鸭子类 //因为每个鸭子的模样是不一样的。如:塑料鸭,灰鸭 public abstract void display(); //面向接口编程,使用组合的方式注入fly 采用开闭原则(原有的系统只做新增不做修改) private Fly fly; public Fly getFly() { return fly; } public void setFly(Fly fly) { this.fly = fly; } public void quack() { System.out.println("呱"); } }
public class MallardDuck extends Duck { //绿头鸭 public MallardDuck() { super(); super.setFly(new FlyNoWay());//传入对应对应的飞行实现类 ???直接set 一个实现类?没看懂这写法 } public void display() { System.out.println("绿头鸭"); } } public class RedHeadDuck extends Duck { //红头鸭 public RedHeadDuck() { super(); super.setFly(new RocketFly());//注入不同的接口实现类 } public void display() { System.out.println("红头鸭"); } }
public interface Fly { //fly 接口
    void fly();
}
/**
 * 具体的策略算法实现类
 * 具体的飞行实现类
 */
public class FlyNoWay implements Fly {

    public void fly() {
        System.out.println("不会飞");
    }
}
/**
 * 具体的策略算法实现类
 * 具体的飞行实现类
 */
public class RocketFly implements Fly {
    public void fly() {
        System.out.println("坐火箭");
    }
}
//测试
    public static void main(String[] args) {
    /***
     *  策略模式的理解 根据不同的方式
     */
            Duck duck = new MallardDuck();
            duck.display();
            duck.quack();
            duck.getFly();
    }

 

策略模式

标签:imp   oid   背景   system   his   可变   inter   rdd   display   

原文地址:https://www.cnblogs.com/lanSeGeDiao/p/9362300.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!