`

设计模式之策略模式(Strategy)

阅读更多

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

 

策略模式类图:


策略模式与设计原则:

封装变化

把会变化的部分取出来并封装起来,以便以后可以轻易的改动或者扩展此部分,而不影响不需要变化的其他部分。(找出应用中可能需要变化的部分,把他们独立出来,不要和那么不需要变化的代码混在一起)。

 

针对接口编程,而不是针对实现编程

这里所谓的接口,是指广义的接口,而非狭义的JAVA接口。泛指针对“超类型的编程”

 

多用组合,少用继承

组合与继承是复用的两个常用的方法。

组合:我们把职责独立出专门的类族,外部对象通过引用最高层的抽象接口来实现复用。当我们需要复用这部分功能时,只需要委派我们引用接口的具体对象来完成调用即可。对于外部引用者来说,他们不需要关心也不知道具体执行者是谁,从而达到解耦的目的,方便今后扩展以适应更多的变化。同时组合可以在运行时灵活的变更其运行时的行为,通过setter方法,注入不同的实现类可完成并适应此类需求,而继承在运行时却是无法做到的。

继承:通过直接继承一个类,我们的子类可以直接继承自父类的很多已经实现了的职责与方法,因此通过继承,我们也能达到复用的目的。但继承有自身的问题:

1、JAVA不支持多继承;

2、继承是一种编译期的行为,一旦编译过后就无法改变,我们在运行时无法更改其行为;

继承的目的也是为了组合,如果不是这样,请不要随便使用继承,除非从对象本身来讲,父子之间本来就是一种(IS A)的关系,这时候我们才使用继承。


参考资料:

Head First 设计模式 (中国电力出版社)

  • 大小: 24.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics