Design Pattern-----策略设计模式(Strategy Design Pattern)

需求

  • 我们现在需要一个鸭子应用,但是鸭子(Duck)有很多品种
  • RedHeadDuck(红头鸭),MallardDuck(绿头鸭),RubberDuck(橡皮鸭),DecoyDuck(诱惑鸭)
  • 总结鸭子的方法:display(外形)是每个都不一样的,可是叫,飞,游泳是有存在不同的情况的:部分相同,部分不存在的;所以使用“策略设计模式”–(Strategy Design Pattern)

图解

Design Pattern-----策略设计模式(Strategy Design Pattern)_第1张图片

  • 抽取总的抽象父类:Duck。Duck 拥有的成员接口变量:FlyBehavior,QuackBehavior;并提供setter 方法
  • Duck 拥有方法:swim(),abstract disply(),performQuack(),PerformFly()。。。方法。其中perfromXX 的方法是两位成员接口变量完成的
  • Duck 有各自的子类实现类:MallardDuck,RedheadDuck,RubberDuck,DecoyDuck—他们只需要实现display方法;然后在构造函数需用合适的Behavior 实现类;
  • xxxBehavior的实现类分别实现对应的方法,然后供具体的duck在构造函数创建;

小结

我们应该出了必须具体实现的方法如:display(),其他的方法都交由接口实现.然后具体的鸭子就能各自根据情况,使用不同的策略,调用具体的Behavior,这个就是Strategy Design Pattern.

具体代码

1.两个行为接口

interface FlyBehavior{
    void fly();
}
interface QuackBehavior{
    void quack();
}

2.父类Duck

abstract class Duck{
    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;

    protected void swim(){
        System.out.println("鸭子游泳......");
    }
    protected void performFly(){
        flyBehavior.fly();
    }
    protected void performQuack(){
        quackBehavior.quack();
    }
    abstract void display();

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }
}

3.对行为继续不同的实现:
FlyBehavior:
—FlyRockBehavior
—NotFlitBehavior
—FlyNoWayBehivor

QuackBehavior
—Quck
—Squeak
—MulteQuack

4.具体的鸭子类

class MallarDuck{

    public MallarDuck(){
        setFlyBehavior(new FlyRockBehavior());
        setQuackBehavior(new MulteQuack());
    }

    display(){
        ....
    }

}

使用

我们再增加新的功能的使用,只需要基础duck,复写display 方法,然后需要合适的Behavior 或者自己实现新的Behavior 就可以了.这个就是—策略模式

你可能感兴趣的:(java基础)