admin管理员组文章数量:1130349
一、原理讲解
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中。)
二、具体示例代码
一、原理讲解
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中。)
二、具体示例代码
版权声明:本文标题:C++设计模式——策略模式(strategy pattern) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1754915606a2741290.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论