策略模式 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; }