码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式 Strategy

时间:2015-07-13 15:31:20      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

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

策略模式与工厂模式区别

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

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

    )

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

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

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

    // 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;
    }

     

策略模式 Strategy

标签:

原文地址:http://www.cnblogs.com/xiumukediao/p/4642910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!