首页 > 代码库 > 简单工厂模式

简单工厂模式

    简单工厂模式

一、简介

  简单工厂模式又叫静态工厂方法(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 COperation14 {15 public:16     virtual double GetResult()17     {18         return m_nFirst + m_nSecond;19     }20 };21 //减法22 class SubOperation : public COperation23 {24 public:25     virtual double GetResult()26     {27         return m_nFirst - m_nSecond;28     }29 };30 31 //工厂类32 class CCalculatorFactory33 {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 }

 

简单工厂模式