策略模式

2018-01-05  本文已影响5人  yangzai
public abstract class Duck {
       //定义抽象行为
    FlyBehavior mFlyBehavior;
    QuackBehavior mQuackBehavior;
    public Duck() {}
    public void Fly() {
        mFlyBehavior.fly();
    }
    public void Quack() {
        mQuackBehavior.quack();
    }
    public abstract void display();
    public void SetQuackBehavoir(QuackBehavior qb) {
        mQuackBehavior = qb;
    }
    public void SetFlyBehavoir(FlyBehavior fb) {
        mFlyBehavior = fb;
    }
    public void swim() {
        System.out.println("~~im swim~~");
    }
}

行为组设计:

//飞行接口
public interface FlyBehavior {
    void fly();
}
//坏的飞行
public class    BadFlyBehavior implements FlyBehavior{
    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("--BadFly--");
    }
}
//好的飞行
public class    GoodFlyBehavior implements FlyBehavior{
    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("--GoodFly--");
    }
}
//不会飞
public class    NoFlyBehavior implements FlyBehavior{
    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("--NoFly--");
    }
}

叫声行为组设计:

//叫声接口
public  interface QuackBehavior {
    void quack();
}
//嘎嘎叫
public  class GaGaQuackBehavior implements QuackBehavior{
    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("__GaGa__");
    }   
}
//咯咯叫
public  class GeGeQuackBehavior implements QuackBehavior{
    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("__GeGe__");
    }
}
//不会叫
public  class NoQuackBehavior implements QuackBehavior{
    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("__NoQuack__");
    }
}

实现了不同行为策略的鸭子

//绿头鸭会飞,还会嘎嘎叫
public class GreenHeadDuck extends Duck {
    public GreenHeadDuck() {
        mFlyBehavior = new GoodFlyBehavior();
        mQuackBehavior = new GaGaQuackBehavior();
    }
    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("**GreenHead**");
    }
}
//红头鸭子不会飞,但是会咯咯叫
public class RedHeadDuck extends Duck {
    public RedHeadDuck() {
        mFlyBehavior = new BadFlyBehavior();
        mQuackBehavior = new GeGeQuackBehavior();
    }
    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("**RedHead**");
    }
}

有了这些行为组之后,我们在定义具体的鸭子时,只需要组合不同的具体行为,父类就能帮我们调用具体的行为。这样的好处,子类能充分复用共同的行为代码,并且能够随意组合各种行为,还将变化的行为分离出来,对行为的扩展是开发的。

上一篇下一篇

猜你喜欢

热点阅读