简单工厂模式
一、简介
简单工厂模式又叫静态工厂方法(Static Factory Method)模式。
其实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
简单的说,就是一个专门的类来负责所有的实例的创建。
二、角色及其职责
工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
抽象产品(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
三、优缺点
优点:
1. 分离产品的创建者和消费者,有利于软件系统结构的优化。
2. 能根据外界给定的信息,决定应该创建哪个具体类的对象。
缺点:
1. 违反了开放封闭原则,如果需要添加新的类,需要改变工厂类。
2. 一旦工厂不能正常工作,整个系统都要受到影响
3. 由于工厂类是静态的,无法让子类继承,无法形成基于基类的继承树结构。
四、使用场景
工厂类负责创建的对象比较少;
五、源码
摘自《大话设计模式》
1 class COperation 2 { 3 public: 4 int m_nFirst; 5 int m_nSecond; 6 virtual double GetResult() = 0;11 }; 12 //加法 13 class AddOperation : public COperation 14 { 15 public: 16 virtual double GetResult() 17 { 18 return m_nFirst + m_nSecond; 19 } 20 }; 21 //减法 22 class SubOperation : public COperation 23 { 24 public: 25 virtual double GetResult() 26 { 27 return m_nFirst - m_nSecond; 28 } 29 }; 30 31 //工厂类 32 class CCalculatorFactory 33 { 34 public: 35 static COperation* Create(char cOperator); 36 }; 37 38 COperation* CCalculatorFactory::Create(char cOperator) 39 { 40 COperation *oper; 41 //在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI?? 42 switch (cOperator) 43 { 44 case '+': 45 oper=new AddOperation(); 46 break; 47 case '-': 48 oper=new SubOperation(); 49 break; 50 default: 51 oper=new AddOperation(); 52 break; 53 } 54 return oper; 55 } 56 57 客户端 58 int main() 59 { 60 int a,b; 61 cin>>a>>b; 62 COperation * op = CCalculatorFactory::Create('-'); 63 op->m_nFirst=a; 64 op->m_nSecond=b; 65 cout<<op->GetResult()<<endl; 66 return 0; 67 }