zoukankan      html  css  js  c++  java
  • 【设计模式】策略模式(经过改进的)

     

    和前文讲到的经过改进的简单工厂模式类似,这里把策略模式和简单工厂模式结合起来。

    改进的关键是改写【TodoContext】上下文类,要在该类中产生对象(【干活】类的动态类型),对外提供的干活函数不变。

    如下:

    最大的不同就是CTodoContext类的构造函数参数不同了,构造函数成为类似简单工厂模式类的参数,

    构造函数根据此参数去实例化不同的子类

     

    //【ToDo上下文】类
    class CTodoContext 
    {
    public:
        //构造函数的参数为一个【活的名字】
        //构造函数根据这个名字去实例化不同的子类
        //将子类指针赋值给抽象基类指针
        CTodoContext(string strWorkName);
        void DoSomething();  //此函数非虚,和【干活】类及其子类没有关系
    
        virtual ~CTodoContext();
    
    protected:
        CDoSomething* m_ptrDoSomething;
    };
    
    CTodoContext::CTodoContext(string strWorkName)
    {
        //在构造函数中获取 【干活】类的动态类型
        if (strWorkName == string("软件开发"))
        {
            m_ptrDoSomething = new CSoftDevelop();
        }
        else if (strWorkName == string("市场拓展"))
        {
            m_ptrDoSomething = new CBusinessDevelop();
        }
        else if (strWorkName == string("数据处理"))
        {
            m_ptrDoSomething = new CDataHandle();
        }
        else
        {
            m_ptrDoSomething = NULL;
        } 
    }
    
    void CTodoContext::DoSomething()
    {
        if (NULL != m_ptrDoSomething) 
            m_ptrDoSomething->DoSomething(); 
    }
    
    CTodoContext::~CTodoContext()
    {
        if(NULL != m_ptrDoSomething) delete m_ptrDoSomething;
    }

     

     

    main函数以及运行情况:

     

     

      这样好多了呢

     

     

  • 相关阅读:
    Java 集合-Map集合嵌套 的遍历四种方式
    Java 集合-set集合,Map接口
    Java 集合 Collection
    Java中的各种转换
    Java 关于时间的类
    Java 中 String、StringBuffer、StringBuilder 类
    Java 构造函数,super,this,final,static
    Java 面向对象关键字
    ArrayList集合
    JAVA数组
  • 原文地址:https://www.cnblogs.com/cuish/p/3724264.html
Copyright © 2011-2022 走看看