策略模式的UML类图(VS2013 C++版本):
策略模式的重点:每个策略对象封装一个算法,有多少个算法就有多少个对象。策略模式的意图是封装算法。要从“抽象不仅面对状态(字段、属性)还面对行为(算法、函数)”这个概念来理解策略模式。
策略模式实现的关键:
1、将一组相关(名称、目的相关),但是具体实现又不同的算法抽象到一个接口里面(Compositor.Compose),子类SimpleCompositor和TeXCompositor去实现各自的Compose方法。
2、上下文类(Composition)使用一个策略的接口\抽象类的对象(Composition._compositor)作为入口来操作具体的策略子类。这也是上下文类和策略类传递数据的一种方式。在main函数中,构造上下文类对象的时候,构造函数接收一个策略接口\抽象类对象作为参数。
3、使用具体策略子类对象作为参数来构造上下文类,目的是初始化其内部包含的策略接口\抽象类对象(Composition._compositor):
Composition* quick = new Composition(new SimpleCompositor);
4、main函数中使用Composition对象来调用具体的算法。而选择哪种算法是申明伤心为你类对象的时候就定义好的。
quick->Repair();