关于C++简单工厂和静态工厂设计模式的描述

简单工厂模式(静态工厂模式)

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

 

简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。

 

工厂(Creator)角色

 

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

 

抽象产品(Product)角色

 

简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

 

具体产品(Concrete Product)角色

 

是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
工厂类负责创建的对象比较少;
客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
示例代码:
#include <iostream>
using namespace std;

class Product{//抽象产品
public:
    int op1,op2;
public:
    void setOpt(int o1,int o2){
        op1=o1;
        op2=o2;
    }
    virtual double getResult(){
        double result=0;
        return result;
    }
};
class ConcreteProduct_1:public Product{//具体产品1
public:
    virtual double getResult(){
        return op1+op2;
    }
};
class ConcreteProduct_2:public Product{//具体产品2
public:
    virtual double getResult(){
        return op1-op2;
    }
};
class Creator{//工厂
public:
        static Product * Create(char cOperator)
        {
            Product * oper;
            switch(cOperator)
            {
            case '+':
                oper = new ConcreteProduct_1();
                break;
            case '-':
                oper = new ConcreteProduct_2();
                break;
            default:
                oper = new ConcreteProduct_1();
                break;
            }
            return oper;
        }
};
int main()
{
    int a=10,b=5;
    Product * op = Creator::Create('-');//客户给出操作参数
    op->setOpt(a,b);
    cout << op->getResult() << endl;//得到产品
    return 0;
}

 

 

posted @ 2017-04-07 16:37  奇热行  阅读(565)  评论(0)    收藏  举报