策略模式 Strategy

根据所给信息,选取不同策略;

策略模式与工厂模式区别

 个人理解(工厂模式:通过所给信息建立不同的对象

      策略模式:通过所给信息选择不同的策略

    )

  • 用途不一样 
    工厂是创建型模式,它的作用就是创建对象; 
    策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为;
  • 关注点不一样 
    一个关注对象创建 
    一个关注行为的封装

  • 解决不同的问题 
    工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。 
    策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。

  • 工厂相当于黑盒子,策略相当于白盒子。

    // Strategy.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <IOSTREAM>
    #include <string>
    
    using namespace std;
    class Paint{
    public:
        virtual void paint() = 0;
    };
    
    class PaintbyPen:public Paint{
    public:
        void paint(){
            cout<<"use pen to paint"<<endl;
        }
    };
    
    class PaintbyPencil:public Paint{
    public:
        void paint(){
            cout<<"use pencil to paint"<<endl;
        }
    };
    
    class Client{
    public:
        Paint * getpaint(string type){
            if("pen" == type ){
                m_p = new PaintbyPen;
                return m_p;
            }
            if("pencil" == type ){
                m_p = new PaintbyPencil;
                return m_p;
            }
        }
    private:
        Paint * m_p;
    };
    int main(int argc, char* argv[])
    {
        Client * pclient = new Client;
        Paint * p = pclient->getpaint("pencil");
        p->paint();
        return 0;
    }

     

posted @ 2015-07-13 14:56  朽木可雕否  阅读(119)  评论(0编辑  收藏  举报