今天看一个《head first design pattern》 书的第一章。发觉这本书真的和别人说的一样的是一本好书呀。难怪获得JOLT大奖。 策略模式:就是把不变的东西封装,把变的东西通过代理实现,下面的例子是原书的例子 假设我们要设计一个鸭子游戏,那我们设计一个超类DuckDuck 有这些属性(是一个抽象类)quack()swim()display() // 外观是绿头 } // 鸭子的其他方法 MallardDuck继承了Duck display() ... { // 外观是绿头 } RedheadDuck继承了Duck display() ...{ // 外观是红头 }由于某些原因要让有的鸭子会叫和会飞,一开始想在Duck超类上添加fly()和quack();看上去好想没有什么问题,但是所有的鸭子都会fly()和quack()吗?想想也是呀假鸭和聋哑就不会quack而且每一只鸭的fly和quack可能不一样那么怎么解决了。引用策略模式(): 把fly的行为封装在FlyBehavior接口,同样把quack的行为封装在QuackBehavior接口public abstract class Duck ...{ FlyBehavior fl yBehavior; QuackBehavior quackBehavior; public Duck() ...{} public abstract void display(); public void performFly() ...{ fl yBehavior.fl y();} public void performQuack() ...{ quackBehavior.quack();} public void swim() ...{ System.out.println(“All ducks fl oat, even decoys!”);}} 这里用到了oo的多态继承Duck类的子类在实例化通过set##方法来把quackBehavior,QuackBehavior的实例动态加载flybeh FlyBehavior的行为不一定只能给鸭,给鸡给鸟呀QuackBehavior也是同样的上面的就是strategy pattern 其实我有个想法(实现上面的问题的方法):public abstract class Duck ...{ public Duck() ...{} public abstract void display(); public adstract void performFly(); public abstarct void performQuack() ; public void swim() ...{ System.out.println(“All ducks fl oat, even decoys!”);}}