策略模式【C++版】

一、 基本特点:

a)根据不同的情况,创建不同的对象

b)每个对象方法名相同,方法的实现差别很大



二、组成:

a)抽象策略: 1个

b)具体策略 多个,封装了相关的算法和行为

c)调度类: 持有一个具体策略类的引用,供客户端使用



三、代码实现:

#include<iostream>using namespace std;/*************************************策略基类****************************************/  class StrategyBase//主要定义了虚函数  {     public:         virtual void multiWay_tour()=0;//说明是纯虚函数(没有实现的虚函数),必须如此声明  };/*************************************具体策略类****************************************/  class StrategyFirstChild:public StrategyBase//策略子类,主要对父类定义的虚方法进行具体实现  {     public:        void multiWay_tour()        {           cout<<"I'll go tourism on feet"<<endl;        }  };  class StrategySecondChild:public StrategyBase//策略子类,主要对父类定义的虚方法进行具体实现  {     public:        void multiWay_tour()        {           cout<<"I'll go tourism by train"<<endl;        }  };/*************************************调度类****************************************/  class Context //调度类,根据传进来的参数,选择具体某个策略----待优化<参考教程>  {     private:         StrategyBase *strategyChild;     public:       Context(StrategyBase *child)       {          strategyChild=child;       }       void multiWay_tour()       {         strategyChild->multiWay_tour();       }       };/*************************************客户端****************************************/int main(){    cout<<"测试程序"<<endl;    //“具体策略类”只在定义多个“调度类”时使用    Context *Context_A=new Context(new StrategyFirstChild()),            *Context_B=new Context(new StrategySecondChild()),            *Context_C=new Context(new StrategySecondChild());    //调用方法,只通过“调度类”实现,算法之间的差异已被屏蔽    Context_A->multiWay_tour();    Context_B->multiWay_tour();    Context_C->multiWay_tour();    cout<<endl;    system("pause");    return 0;}

运行结果:

策略模式【C++版】

四、策略模式与简单工厂模式对比:

简单工厂模式:根据不同的情况,创建不同的对象,对象之间类型差别较大,

有可能各个类的方法名和个数差别很大

注重不同对象的创建:根据不同的情况创建不同的对象(eg:下单,查资金等)

策略模式根据不同的情况,创建不同的对象.对象不同类型相近,方法差别大. 尤其适合经

常变动的多种不同算法。 一般用于多个类的方法名都相同,但是实现方式不同

注重多个对象的相同行为屏蔽方法名相同,算法实现细节不同之间的差异

(eg:txt、xml、dat、access四种格式的数据操作,读取,删除,修改)






原文链接: https://www.cnblogs.com/edisonfeng/archive/2011/09/05/2167766.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/31754

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午9:04
下一篇 2023年2月8日 上午9:04

相关推荐