• 【设计模式】策略模式(经过改进的)


     

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

    改进的关键是改写【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函数以及运行情况:

     

     

      这样好多了呢

     

     

  • 相关阅读:
    将博客搬至CSDN
    第一章 spring起步
    动态规划-最长非降子序列
    硬币问题-动态规划详解
    哲学家就餐
    java并发编程(十九)障碍器CyclicBarrier
    java并发编程(十八)阻塞队列和阻塞栈
    java并发编程(十七)Executor框架和线程池
    java并发编程(十七)内存操作总结
    java并发编程(十六)happen-before规则
  • 原文地址:https://www.cnblogs.com/cuish/p/3724264.html
Copyright © 2020-2023  润新知