薯片笔记 浅谈工厂模式

来源:互联网 发布:魔方大数据 编辑:程序博客网 时间:2024/04/29 07:31

谈到工厂模式,首先要提到的就是简单的工厂模式。简单工厂模式实际上就是动态实例化类的模式。

工厂方法的类图:


工厂方法的实现:

//算法的父类,抽象出返回结果的接口class Operation{public:    virtual int GetResult() =0;public:    double m_Num1;    double m_Num2;};//工厂类,用于生产相应的算法子类class OperationFactry{public:    OperationFactry(void);    ~OperationFactry(void);public:    static Operation* CreateOperate(int n )    {        switch(n)        {        case 1:            return new OperationAdd1;            break;        case 2:            return new OperationAdd2;            break;        }    }};//算法子类,由工厂类创建,重写父类中的虚函数class OperationAdd1 :public Operation{public:    int GetResult();}; class OperationAdd2 :public Operation{public:    int GetResult();};

而工厂模式就是的单工厂方法进行了抽象的一种模式。一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。

工厂模式的类图


工厂模式的实现

//算法的父类,抽象出返回结果的接口class Operation{public:    virtual int GetResult() =0;public:    double m_Num1;    double m_Num2;};//工厂类,用于生产相应的算法子类class OperationFactry{public:    OperationFactry(void);    ~OperationFactry(void);public:    static Operation* CreateOperate(int n )    {        switch(n)        {        case 1:            return new OperationAdd1;            break;        case 2:            return new OperationAdd2;            break;        }    }};//算法子类,由工厂类创建,重写父类中的虚函数class OperationAdd1 :public Operation{public:    int GetResult();}; class OperationAdd2 :public Operation{public:    int GetResult();};

工厂模式是我们最常用的实例化对象模式了,是用工厂模式代替new操作的一种模式。但是相比起new操作来,工厂模式可以提高代码的简介程度的同时,可以有效的降低构造函数的耦合。工厂模式的缺点就是每添加一个新的产品类的时候,就需要针对工厂基类进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

0 0