工厂模式(C++实现)

1 工厂模式

工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法让一个类的实例化延迟到其子类
工厂模式(C++实现)_第1张图片

2 简单工厂模式实现加减乘除

       简单工厂模式:其最大优点在于工厂类包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖

简单工厂模式实现计算机的加减乘除:
工厂模式(C++实现)_第2张图片
简单工厂类的实现

class OperatorFactory{   
public:
    AbstractCalculator* creatOperate(string str){
        AbstractCalculator *oper = NULL;
        
        if(str == "+"){
            oper = new(ADDCalculator);
        }else if (str == "-"){
            oper= new(SUbCalculator);
        }else if (str == "*"){
            oper = new(MulCalculator);
        }else if (str == "/"){
            oper = new(DivCalculator);
        }else{
            cout << "false!!!!!" << endl;
        }
        return oper;
    }
};

客户端实现:

int main(){
    AbstractCalculator *oper;
    OperatorFactory factory;
    oper = factory.creatOperate("+");
    oper->m_Num1 = 1999;
    oper->m_Num2 = 7234.44;
    cout << oper->m_Num1 << " + " << oper->m_Num2 << " = " << oper->getResult() << endl;
    
    return 0;
}

3 工厂模式实现加减乘除

工厂模式(C++实现)_第3张图片
工厂类的实现:

创建一个工厂接口

class IOperatorFactory{
public:
    virtual AbstractCalculator* createOperate() = 0;
};

然后加减乘除各建一个具体工厂实现这个接口

class AddFactory: public IOperatorFactory{
public:
    AbstractCalculator* createOperate(){
        return new ADDCalculator;
    }
};
class SubFactory: public IOperatorFactory{
public:
    AbstractCalculator* createOperate(){
        return new SUbCalculator;
    }
};
class MulFactory: public IOperatorFactory{
public:
    AbstractCalculator* createOperate(){
        return new MulCalculator;
    }
};
class DivFactory: public IOperatorFactory{
public:
    AbstractCalculator* createOperate(){
        return new DivCalculator;
    }
};

客户端实现:

int main(){
    AbstractCalculator *oper;
    IOperatorFactory *factory = new AddFactory;
    oper = factory->createOperate();
    oper->m_Num1 = 1999;
    oper->m_Num2 = 7234.44;
    cout << oper->m_Num1 << " + " << oper->m_Num2 << " = " << oper->getResult() << endl;
    
    return 0;
}

       工厂模式把简单工厂的内部逻辑判断转移到了客户端进行,想要添加功能时,本来改的是工厂类,现在修改的是客户端
       工厂方法克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。
       两者都是集中封装了对象的创建,使得要更换对象时,不需要做大的改动就可以实现,降低了客户程序与产品对象的耦合

你可能感兴趣的:(设计模式,设计模式,工厂方法模式,c++)