刚读的head first 设计模式,第一个就是策略模式,讲的有趣
以书上案例为例,我们要设计一群鸭子,这群鸭子有不同的行为表现,可以呱呱叫或吱吱叫,可以飞或游泳,最初版本设计如下:
但是这样的话,我们不能在父类加入fly的方法,因为那样会使不能fly的鸭子也继承fly的方法,并且有加入新的方法都会这么麻烦
接下来我们想到接口实现:
class duck
{
display()
swim()
}
//行为接口
flyable
{
fly()
}
//叫声接口
queckable
{
quack()
}
不同的鸭子实现不同的接口方法,但马上我们又遇到新的问题,重复的代码变多,duck的子类都要修改一下接口方法,我们解决了继承不是很合适的问题,但却造成代码无法复用,甚至遇到无法解决的鸭子飞行动作多种变化
那么如何优秀的解决这个问题?
“采用良好的oo软件设计原则”,在此问题中就是分开会变化和不会变化的部分,封装会变化的部分,以便以后改动此部分
最后设计: