总是有一些奇怪的事情发生,我刚刚买了<HeadFirst 设计模式>,就有人写了如题的一篇文章。
我是用PHP的,而书上讲的例子是用伪代码(以java为蓝本)的,我也没有看多少呢,也没有想过要来实现一下,因为有些东西使用PHP的话,只会效率更低,解释型的,IO能节约还是要节约一下。
总想等看完再实现这些(第一大章还没有看完呢。)
不过,既然有人写了,总要宣扬一下的吧,代码虽然不一样,但思想总是一样的。
我也没有仔细看,就权当收藏吧。。
HeadFirst设计模式学习笔记(C#版):鸭子与策略(Strategy)模式
讲了什么呢?
摘要如下:
策略模式的设计原则如下:
1. 将应用中需要经常变化的代码独立出来,应和那些不需要经常变化的代码分开。
2. 应针对接口,而不是类进行编程。
3. 在类中应多用组合,少用继承。
例子:
我们要实现一个鸭子模拟器,这个鸭子模拟器由Duck类描述,而Duck类有如下4个行为:
1. display
2. swim
3. fly(飞)
4. quack(叫)
其中swim是所有鸭子都具有的特性,而且所有鸭子的这些特性都相同,因此,这个方法可以直接在Duck类中实现。display方法也是所有鸭子具有的 特性,但随着鸭子的种类不同,display也有所不同,因此,display方法应为Duck类的抽象方法。fly和quack并不是所有鸭子的特性, 如橡皮鸭子即不会飞,也不会叫。因此,可以将这两个方法看作是两个行为,可将每一个行为设计成一个接口。这样可以和Duck类完全脱离。因为,fly和 quack与Duck一点关系都没有(别的东西也可能fly和quack),然后不同的fly和quack分别用实现相应接口的类表示。