一、原理讲解
1.1意图
定义算法簇,将这些算法封装起来,之间可以相互替换。这样的好处在于,使得算法可以独立于使用它的客户而变化。
1.2与模板方法区别
模板方法主要是继承接口类,而策略模式主要是组合接口类,两种方法核心区别在于,是继承?还是组合?
设计模式八大原则之一:优先使用对象组合,而不是类继承。
1.3结构图UML
1.4设计步骤
a1 先定义一个接口类最为抽象基类IStrategy
a2 定义一系列算法(本示例中定义两个算法)类Strategy1和Strategy2,继承抽象基类IStrategy。算法类重写抽象基类IStrategy接口函数,也就是分别在类Strategy1和Strategy2中实现算法细节fun。
a3 创建一个上下文类Context,申明一个抽象基类对象指针*pISreategy和实现一个函数run()。在函数run()中,组合不同算法,也就是调用各种具体算法函数,通过基类IStrategy对象的多态特性,自动策略调用并不同算法。
(备注:该实现函数跟模板方法的结构框架十分类似。两者区别在于,模板方法的框架实现是在基类中,而策略模式的模板实现是在上下文类Context中。)
二、具体示例代码
发布评论