读Head First设计模式有感之一:策略模式

设计模式的入门这节中,关于鸭子设计的问题。表达不好,可以直接看代码:http://download.csdn.net/detail/worsun/9308049


设计一个鸭子的游戏,有各种鸭子存在。其中以鸭子叫和飞来说明问题。有的鸭子会飞,有的不会(橡皮鸭)。同样,有的鸭子会叫有的不会。


设计这个游戏时候,设计一个鸭子父类,有鸭子的各种行为,各式各样的鸭子继承该父类,这会造成本不会飞不会叫的鸭子会飞会叫!!!这明显是一个错误。

若把鸭子设置成为一个接口,解决的鸭子行为的问题,但是又带来了一个新的问题。每一个继承该鸭子接口的类必须实现鸭子接口里面行为的方法。这明显会造成代码的大量重复。不符合OO设计原则。


对于这个问题的解决,要遵循设计原则一:找出应用中可能的变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。

在设计鸭子行为的方法上,不妨设计成鸭子可以动态的“改变鸭子的行为”。那么看设计原则之二:针对接口编程,而不是针对实现编程。(程序要有弹性)关于针对接口和实现编程的例子可参考12页的例子(把子类对象赋给父类)。

我们把鸭子的行为提取出来,封装成对应的接口。鸭子的行为就不再有鸭子类来实现,而是由行为类来实现行为接口!!!

读到此处,对设计模式有一个大概的认识,是否正确需要继续读下去才能验证。所谓的设计模式,就是在设计的过程中,尽量把所有东西都分成不想关的模块(耦合小),使用的时候再把这些模块组合成想要的对象。

整合鸭子的行为:

     1、在鸭子类中,“加入两个实例变量”,声明为接口类型

     2、在鸭子类中,使用声明的接口类型调用鸭子的行为方法

     3、在鸭子子类中,new一个鸭子行为接口的对象赋值给实例变量。

到此时,应该一个成熟的模型已经搭建好了。下面是展示这个关系的代码:http://download.csdn.net/detail/worsun/9308049

这是类之间的关系图:


到此,我们发现,实现鸭子的功能不是通过继承得来的。而是通过组合得来的!!!

设计原则三:多用组合,少用继承!!!!!!!!!!!因为组合更具有弹性,能够更方便的动态改变行为。当然,组合也有自己的缺陷,这个以后再慢慢来说。


这就是策略模式,策略模式的严格定义:定义了算法族,风别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值