工厂方法模式
此模式对着简单工厂模式写的,和书上案例不一致
#include<iostream>
using namespace std;
//工厂方法模式
//抽象运算类
class AbstractOperation {
public:
virtual int GetResult() = 0;
void Get(int _NumberA, int _NumberB) {
this->NumberA = _NumberA;
this->NumberB = _NumberB;
}
protected:
int NumberA = 0;
int NumberB = 0;
};
//具体运算类
class OperationAdd : public AbstractOperation {
public:
virtual int GetResult() {
return NumberA + NumberB;
}
};
class OperationSub : public AbstractOperation {
public:
virtual int GetResult() {
return NumberA - NumberB;
}
};
class OperationMul : public AbstractOperation {
public:
virtual int GetResult() {
return NumberA * NumberB;
}
};
class OperationDiv : public AbstractOperation {
public:
virtual int GetResult() {
return NumberA / NumberB;
}
};
/*扩展一个取模运算类*/
class OperationMod :public AbstractOperation {
public:
virtual int GetResult() {
return NumberA % NumberB;
}
};
//抽象运算工厂类-->开闭原则: 对扩展开发,对修改关闭!!
class AbstractOperationFactory {
public:
virtual AbstractOperation* CreatOperate() = 0;
};
//具体运算工厂类
class AddFactory : public AbstractOperationFactory {
public:
virtual AbstractOperation* CreatOperate() {
return new OperationAdd;
}
};
class SubFactory : public AbstractOperationFactory {
public:
virtual AbstractOperation* CreatOperate() {
return new OperationSub;
}
};
class MulFactory : public AbstractOperationFactory {
public:
virtual AbstractOperation* CreatOperate() {
return new OperationMul;
}
};
class DivFactory : public AbstractOperationFactory {
public:
virtual AbstractOperation* CreatOperate() {
return new OperationDiv;
}
};
/*取模运算工厂类*/
class ModFactory :public AbstractOperationFactory {
public:
virtual AbstractOperation* CreatOperate() {
return new OperationMod;
}
};
void test1() {
AbstractOperationFactory* factory = NULL;
AbstractOperation* operate = NULL;
//创建加法工厂
factory = new AddFactory;
operate = factory->CreatOperate();
operate->Get(5, 6);
cout << operate->GetResult() << endl;
delete operate;
delete factory;
}
void test2() {
AbstractOperationFactory* factory = NULL;
AbstractOperation* operate = NULL;
//使用取模运算
factory = new ModFactory;
operate = factory->CreatOperate();
operate->Get(5, 6);
cout << operate->GetResult() << endl; //结果为5--成功
delete operate;
delete factory;
}
int main()
{
test1();
test2();
return 0;
}