设计模式 -------- 策略模式

来源:互联网 发布:matlab 生成cell矩阵 编辑:程序博客网 时间:2024/06/02 13:27

初学设计模式 之 -------------- 策略模式:

    策略模式(多用组合,少用继承):   就好比有一个鸭子类!  然而生活中有很多种类的鸭子!

public abstract class Dog  {    public FlyBehavior flyBehavior;    public QuackBehavior quackBehavior;    public void setFlyBehavior(FlyBehavior flyBehavior) {        this.flyBehavior = flyBehavior;    }    public void setQuackBehavior(QuackBehavior quackBehavior) {        this.quackBehavior = quackBehavior;    }    //叫    public void call(){        flyBehavior.fly();    }    //跑    public void run(){        quackBehavior.quack();    }    //都有不痛的类型    public abstract void setType();}

  鸭子又有许多不同的动作和外形!  有的不会飞有的会飞!这时就需要我们把具体的行为给抽出一个模块!

public class BlueDog extends Dog {    public BlueDog() {        flyBehavior = new SlowlyFly();        quackBehavior = new ZIQuack();    }}

 例如   使用代理“QuackBehavior(接口)”来当做鸭子的一个行为! 然后又有需要不同的行为,  就可以写不同的类去实现代理接口! 

public class SlowlyFly implements FlyBehavior {    @Override    public void fly() {        Log.e("TAG" ,"慢慢的飞");    }}

当我们需要为不同的对象调用不同的行为时就可以吧这个模块化,最后在调用时:

public class MainActivity extends AppCompatActivity {    private Dog dog;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        dog = new RedDog();        dog.call();        dog = new BlueDog();        dog.call();        dog.setFlyBehavior(new NoFly());        dog.call();    }}

原创粉丝点击