《Head First-Chapter1》策略模式

会飞的鸭子----策略模式

一、模拟鸭子




二、会飞的鸭子

1、设计一(继承)


发生的问题:并非所有的鸭子都会飞。在Duck超类中添加fly()方法,会使得某些并不适合该行为的子类(如:橡皮鸭RubberDuck(会叫,不会飞)、诱饵鸭Decoy(木头假的,不会叫也不会飞))也具有该行为。当然,在子类中fly()方法体可以为空,但是有很多这样子类时,不是一种好的设计。

2、设计二(接口)


发生的问题:重复的代码会变多!例如:假设飞有两种形式,一种是在顺飞,另一种是倒飞。假设有20种子类,10种顺飞,10种倒飞,那么对于顺飞(或倒飞),每个子类都会重写一遍这样代码。其实只有两套代码,这里有大量重复。

三、3个设计原则

1、软件开发的一个不变真理:change。
      不管当初软件设计得多好,一段时间后,总是要成长与改变。
2、设计原则1:封装变化。
       把会变化的部分取出并“封装”起来,好让其他部分不会受到影响。
       
3、设计原则2:针对接口编程,而不是针对实现编程。
4、设计原则3:多用组合,少用继承。

四、重新设计(策略模式)

         
      (1)这样的设计,可以让“飞行”和“呱呱叫”行为被其他的对象复用,因为这些行为已经与鸭子类无关了
      (2)我们可以新增一些行为(如下蛋行为),而不会影响到既有的行为类(如飞行类和呱呱叫类),也不会影响“使用”到既有行为的鸭子类。

五、策略模式

  定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值