OO设计模式笔记01—策略模式
OO设计模式—策略模式
设计原则tip1:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
如果每次新的需求依赖,都会使某方面的代码发生变化,那么你就可以确定,这部分的代码需要被抽出来,和其他稳定的代码有所区分。
考虑一个个经典的例子
Duck类中有fly和quack两种行为,但是不同的鸭子有不同的fly和quack行为。为了要把这个行为从Duck类中分开,我们将把他们从Duck类中取出来,建立一组新类来代表每个行为。
设计原则tip2:针对接口编程,而不是针对实现编程。这里的接口可以理解为接口interface或是抽象类。
在上面的问题中,我们利用接口代表每个行为,比方说,FlyBehavior与QuackBehavior,而行为的每个实现都将实现其中的一个借口。
这次鸭子类不会负责实现Flying与Quacking接口,反而是由我们实现FlyBehavior与QuackBehavior,这就称为“行为”类。由行为类来实现接口。
看以下代码:
Duck类
public class MallardDuck extends Duck {public MallardDuck(){quackBehavior = new Quack();flyBehavior = new FlyingWithWings();}public void display(){System.out.println("I am a real mallard duck");}}public class MuteDuck extends Duck{public MuteDuck(){flyBehavior = new FlyingNoWay();quackBehavior = new Quack();}public void display(){System.out.println("I am a Mute Duck");}}public class MiniDuckSimu {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubDuck mallard = new MallardDuck();mallard.performFly();mallard.performQuack();Duck Mute = new MuteDuck();Mute.performFly();Mute.performQuack();}}