zoukankan      html  css  js  c++  java
  • 策略模式【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;
    }

     运行结果:

     

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

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

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

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

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

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

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

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


                    

  • 相关阅读:
    Hadoop技术创新方案
    什么是大数据
    大数据框架hadoop服务角色介绍
    学习hadoop需要什么基础
    web开发安全框架中的Apache Shiro的应用
    大数据分布式存储的部署模式:分离式or超融合
    Class类的getSimpleName()
    Eclipse快捷键
    mysql_建立索引的优缺点
    锁表 for update
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2167766.html
Copyright © 2011-2022 走看看