与Template模式相类似,策略模式要解决的也是算法框架(接口)与具体算法实现的解耦。Template使用的是继承的方式,而Strategy模式使用的是组合(委托)的方式。
以下为Strategy模式的UML类图
Strategy基类:声明了接口,其接口具体实现就交由其子类去实现。Context类
Context类: Context需要用到那个Strategy类的子类,就用它的成员strategy指针去指向该Strategy子类,然后在doAction()中去调用Strategy的operation()函数。Strategy模式通过这个类,以通过“组合”方式实现算法(实现)的异构。
//main函数的实现
{
Strategy* stg = new StrategyA();
Context* context = new Context(stg);
Context->Action();
delete stg;
delete context;
}
很多设计模式看起来很相像,但由于解决的问题不一样,方向不一样,所以就有了区别。我知道一句话:当你真正能理解设计模式,就已经在code中融汇了各种模式,可以说处处有招,也可以说处处无招。