一、原理讲解

1.1意图

定义算法簇,将这些算法封装起来,之间可以相互替换。这样的好处在于,使得算法可以独立于使用它的客户而变化

1.2与模板方法区别

模板方法主要是继承接口类,而策略模式主要是组合接口类,两种方法核心区别在于,是继承?还是组合?

设计模式八大原则之一:优先使用对象组合,而不是类继承。

1.3结构图UML

策略模式UML图

1.4设计步骤

a1 先定义一个接口类最为抽象基类IStrategy

a2 定义一系列算法(本示例中定义两个算法)类Strategy1和Strategy2,继承抽象基类IStrategy。算法类重写抽象基类IStrategy接口函数,也就是分别在类Strategy1和Strategy2中实现算法细节fun。

a3 创建一个上下文类Context,申明一个抽象基类对象指针*pISreategy和实现一个函数run()。在函数run()中,组合不同算法,也就是调用各种具体算法函数,通过基类IStrategy对象的多态特性,自动策略调用并不同算法。

(备注:该实现函数跟模板方法的结构框架十分类似。两者区别在于,模板方法的框架实现是在基类中,而策略模式的模板实现是在上下文类Context中。)

二、具体示例代码