适用条件:
首先,简单的继承无法有效地解决问题;
其次,父类的动作/行为在子类中不断变化,让所有的子类都有这些行为是不恰当的;
再次,接口或者是纯虚函数没有实现,无法达到复用的目的,而这些动作在比较多的子类中被使用
如果出现以上的情况,你就需要尝试使用策略模式来解决问题了。
设计原则:
1) 找出应用中可能需要的变化之处,并把它们独立出来。
2) 针对接口编程,而不是针对实现编程。
主要实现方式:
通过将对象中的变化委托给其他部分处理的方式,将变化从应用中独立出来——将变化封装成接口,在基类中加入其实例。
通过这种方式,使用接口封装后,直接调用接口的动作,而不用在意接口中的动作具体是如何实现的。这样可以在继承基类时对接口进行不同的调用,而不必改变基类中的代码。
主要步骤:
1) 将主类中的变化部分和不会变化的部分分离开
2) 设计变化的部分,封装成接口
3) 继承变化部分的接口,实现各种不同的变化
4) 设计主类的内容,其中将包括变化部分的接口的一个实例
5) 实现子类,从主类中继承,对于变化部分的实例进行自己的实现