工厂方法模式
class Operation;
class OperationAdd;
class OperationSub;
class OperationMul;
class OperationDiv;
enum OperType{
ADD,SUB,MUL,DIV
}
1、简单工厂模式
class OperationFactory{
public:
static Operation *CreateOperation(Opertype type);
}
Operation *OperationFactory::CreateOperation(Opertype type){
switch(type)
{
case ADD:
return new OperationAdd;
case SUB:
return new OperationSub;
case MUL:
return new OperationMul;
case DIV:
return new OperationDIV;
default:
return nullptr;
}
return nullptr;
}
违背了单一指责原则和开闭原则。
2、工厂方法模式
class OperationAddFactory{
public:
static Operation *CreateOperation(){
return new OperationAdd;
};
}
class OperationSubFactory{
public:
static Operation *CreateOperation(){
return new OperationSub;
};
}
int main()
{
Operation *addOper = OperationAddFactory::CreateOperation();
Operation *subOper = OperationSubFactory::CreateOperation();
return 1;
}
工厂方法相比简单工厂,解决了单一职责原则问题,同时可在各工厂中进行其他相关操作,降低了耦合度;解决了开闭问题。
3、抽象工厂模式
//对外暴露接口
class OperationFactory{
public:
virtual Operation *CreateOperation() = 0;
}
class OperationAddFactory : public OperationFactory{
public:
virtual Operation *CreateOperation(){
return new OperationAdd;
};
}
class OperationSubFactory : public OperationFactory{
public:
virtual Operation *CreateOperation(){
return new OperationSub;
};
}
int main(){
OperationFactory *addFactory = new OperationAddFactory();
OperationAdd *operAdd = addFactory.CreateOperation();
return 1;
}