策略模式

继承和实现的思考

继承和实现的目的是多态,多态的作用就是为了一段代码用超类调用方法,根据运行时传入的对象动态转化为具体子类去执行这个方法,而不用修改代码。继承和实现的目的不是为了代码复用,因为复用的代价是高耦合,组合的目的是代码复用,是代码复用的更有弹性的方法。

接口和抽象类的存在意义是多态,如果是代码复用的话,接口是个笑话,你要在每一个实现类中书写相同代码,而修改代码时的重复维护更恐怖。抽象类的话,问题是,牵一发动全身耦合性强,而且长远来看新的实现类并不一定需要这种行为,如果用重写来弥补这种个性需求的话,在快速迭代的情境下,则每次出现新的扩展类或需要修改原先已经存在的行为,那都将是一次梦魇般的体验。

原则:抽离变化的部分,与不变的部分隔离开

抽离变化的部分,找出应用中可能变化的部分,并将其抽离出来。这是所有设计模式的精神所在,系统中的某部分改变不会影响其他部分。

这样在维护和扩展的时候,思路清晰,且只会影响你抽出的变化部分,不会影响其他不变的部分,这样出bug的几率就会大大减小,减少很多出其不意的错误,并且如果变化的部分可以动态的选择性指定给不变的部分,是不是这种自由度更高呢。这就是说的系统变得有弹性(不会嘎嘣脆,一碰碎,而且可以动态组合粘合)。

原则:针对接口编程,而不是具体实现

而针对接口编程,而不是针对实现编程,正是一种动态组合粘合的方式,本质就是多态。这样不变的部分是超类进行方法调用,变化的部分作为子类或实现类,塞进客户类中(组合),真正的隔离变化与不变的部分。

原则:多用组合,少用继承

多用组合,少用继承。继承无法抽出变化部分,组合利用多态却可以。继承耦合性太强,组合松散耦合,继承耦合性,就像齿轮耦合一样,一处动,处处动,当项目复杂到一定程度的时候,改一个地方,可能会牵动四五处修改,这样维护的成本及其恐怖,维护的效率渐渐趋向于0,而组合的话,只用修改抽出的组合组件,影响的域限制在这个组件内。继承能复用代码,组合也可以,但继承复用的代码不利用维护和扩展,组合却没有这个毛病。行为的组合可以在运行时多态指定而达到改变行为的效果,继承不可以,组合更具有弹性。

策略模式

策略模式,是将变化的行为抽取为一个接口(抽取变化部分),并有多种实现类,即算法族。当客户想使用的时候,因为多态所以可以动态的选择这些可替换的实现类(面向接口编程和使用组合),此模式让算法的变化独立于使用算法的客户。可扩展特性和可维护性淋漓尽致。策略模式通过多态和组合,实现了多态弹性和代码的复用性

总结

几乎所有的设计模式和原则,其主题都是应付改变,在设计中,永恒不变的主题就是变化,如果不变化软件就会腐朽死亡。在应付改变中,原先的代码可复用(组合复用代码。抽离出的不变的部分仍可用),可扩充,比如算法族,可以根据需要随时实现一个新的。可维护,比如要修改代码,不会影响不变的部分(客户),维护起来bug率就很低。

抽取变化部分:类的某个行为(方法)是变化的部分,因此抽离出接口,并做了一系列实现,即算法族,根据实际情况组合到客户类中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值