设计模式深入浅出-----策略模式(Strategy Pattern)
使用模式最好的方式是把模式装进脑子里,然后在你的设计和已有的应用中,寻找何处可以使用他们。
策略模式(StrategyPattern):
定义算法族,分别封装起来,让他们之间可以相互替换。此模式让算法的变化独立于使用算法的客户。
1、先从简单的模拟鸭子应用做起:
(1)设计一个鸭子超类,让各种鸭子继承这个超类。

这个是用继承来实现的,看上去没有什么不妥。
(2)现在需要为鸭子增加飞(fly)的功能,而且还会新增鸭子。

只需在父类中加上fiy()方法。橡皮鸭子不会叫,也不会飞,这时只需要覆盖掉里面的方法,让其什么也不做。看上去是很好的设计。
(3)现在设计有变,需要新增100只鸭子,其中很多鸭子不会游泳,也不会飞。
问题:如果用继承,那么你需要自己动手一个个来覆盖,这样的设计还是好的设计吗?
(4)尝试改变设计:将 fly( ) 方法从超类中取出来,放进Flyable接口中去,这样只有会飞的鸭子才实现Flyable接口。
看起来好像是不错的设计,但是并没有做到代码的复用。当有100个鸭子会飞时,那么就必须得实现100次接口了。这只是从一个噩梦跳向另一个噩梦。
2、策略模式引路:
软件开发不变的真理--------CHANGE
不管当初软件设计的多好,一段时间之后,总是需要成长和改变的,否则软件就会死亡。驱动改变的因素很多。
设计原则:找出应用中可能变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。

我们想要的是行为具有弹性。于是可以让鸭子的行为在运行时动态的改变。
设计原则:针对接口编程,而不是实现编程。

现在鸭子的 fiy 与 quack 行为被封装起来了。
现在来写一些代码。
测试代码Duck.java:
以上看到的就是策略模式了。
定义算法族,分别封装起来,让他们之间可以相互替换。此模式让算法的变化独立于使用算法的客户。
策略模式的一般画法。
HeadFirst系列经典例子呀。
转载请注明出处 http://blog.csdn.net/xn4545945
个人微博:http://weibo.com/xuneng007