策略模式

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

例子:鸭子具有飞行、鸭叫的行为。不同类型的鸭子,其行为各不相同,如橡皮鸭不会飞,是吱吱叫。火箭鸭是利用火箭进行飞,是轰轰叫。如果用继承鸭子基类及实现fly接口、quackable接口的方式,那么第一个是代码量很多,需要为每个鸭子都实现fly、quack方法。另外飞行行为需要改变,比如所有飞行行为前都需要检查是否系好安全带,那么所有的鸭子都得改变代码。如果抽象类的有个fly的默认实现,这样子所有的鸭子都会继承到这个fly行为,并需要检查自己是否符合此默认的fly行为,不符合得覆盖。也就是说没添加一个鸭子,都得去检查并很大可能得去覆盖默认的fly方法。所以,继承并不是好方法。

解决方案:

设计原则1: 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起了。

结合例子:我们知道,鸭子的飞行及鸭叫行为会随着鸭子的不同而改变,为了分离出来,我们应该建立一组新类来代表这两个行为。

设计原则2:针对接口编程,而不是针对实现编程。所以行为类应该有接口。

设计原则3:多用组合,少用继承。所以鸭子类组合类飞行为类,鸭叫行为类。

根据上面三个原则,针对鸭子使用策略模式,每个鸭子内有飞行行为类及鸭叫行为类。并能够动态改变。类图如下
:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值