设计模式学习专栏一--------策略模式

2019-03-10  本文已影响0人  你的头发真的好长

策略模式

场景


设计鸭子模拟器系统,实现具有各种行为组合的鸭子

问题引入 : "让鸭子会飞! 此程序需要会飞的鸭子(火箭喷射鸭)" "鸭子的叫声不同(橡皮鸭, 模型鸭)"

较差的实现方式

如何解决


继承的问题:对类的局部改动,尤其超类的局部改动,会影响所有子类部分。影响会有溢出效果

超类挖的一个坑,每个子类都要来填,增加工作量,复杂度O(N^2) (增加N个行为,每个行为N个类来改)。不是好的设计方式

image

策略模式总结


定义:策略模式定义了算法族(行为族),分别封装起来,让它们之间可以相互替换,此模式让算法的变化部分 (鸭子行为) 独立于算法的客户(鸭子)

核心代码部分

public abstract class Duck {
    FlyBehavior flyBehavior;        //飞行行为
    QuackBehavior quackBehavior;    //叫声行为

    public Duck() {
    }

    public void setFlyBehavior(FlyBehavior fb) {
        flyBehavior = fb;
    }

    public void setQuackBehavior(QuackBehavior qb) {
        quackBehavior = qb;
    }

    abstract void display();

    public void performFly() {
        flyBehavior.fly();
    }

    public void performQuack() {
        quackBehavior.quack();
    }

    public void swim() {
        System.out.println("All ducks float, even decoys!");
    }
}

参考

​ 书籍: HeadFirst设计模式

​ 代码参考地址: 我就是那个地址

上一篇 下一篇

猜你喜欢

热点阅读