设计模式—策略模式

今天阅读《Head First设计模式》中讲到的第一个设计模式:策略模式。

策略模式定义了一个算法族,分别封装起来,让他们之间可以相互替换;此模式让算法的变化独立于客户。

书中的例子是设计一个“鸭子模拟器”,用来模拟各种鸭子:橡皮鸭,绿头鸭,红头鸭……

设计方案如下:将各种鸭子“共同的东西”(不变的部分)封装在一个鸭子类Duck,所有的鸭子都要继承这个类。此外将变化的部分提取出来,设计成接口,比如说Fly设计成接口,然后有一系列的Fly的实现(LowFly,HighFly……)。

将Fly接口类型的变量封装在Duck类中,这样每一个继承Duck的鸭子子类就会拥有一个Fly成员,这样就可以委托Fly成员实现“fly行为”。每个Duck的鸭子子类在实现时可以设置不同的Fly实现类,从而实现不同的"fly行为"。

 

实现伪代码如下:

 

注:为什么不让Duck的子类直接实现Fly接口呢?此处正是“多组合,少继承”的体现,如果有100个鸭子都直接实现了Fly接口,他们必须自己实现fly()方法,那么当他们中的许多要改变fly行为时,就要修改fly()方法中的代码。但是,如上述代码,利用组合,则可以动态改变fly行为,只需要添加set方法,设置不同的Fly的实现类即可。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值