《大话设计模式》读书笔记之C++实现--chapter8工厂方法模式

时间:2022-10-02 12:04:18

1、工厂方法模式的UML类图:

《大话设计模式》读书笔记之C++实现--chapter8工厂方法模式

2、工厂模式详解:

--Product:定义工厂方法所创建的对象的接口,即对应的具体产品索要实现的功能的接口,在本文例子中对应的是四则运算算法的功能

--ConcreteProduct:具体产品实现Product的接口

--Creator:声明工厂方法,定义返回一个Product类型的指针的接口

--ConcreteCreator:实现工厂方法中定义的接口返回一个ConcreteProduct类型的指针,用来调用ConcreteProduct的实现具体功能的函数


3、使用场合:
--简单工厂模式相比工厂方法模式最大优点在于工厂类中包含了必要的逻辑判断,可以根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖

--让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。避免了对象的调用者与对象的实现类以硬编码的方式耦合。可以把工厂模式看做供应商与经销商的关系,当用户有请求时直接向经销商(工厂类)请求,实际的产品在供应商处生成(Product类)

--工厂模式的缺点在于当产品修改时,工厂类和Product类也需要做相应的修改。即当客户有新的需求时需要供应商(Product类)和供应商(工厂类)作出相应的变化。


4、C++实现

class Operation {
public:
double numberA;
double numberB;
virtual double GetResult() = 0;
};

class AddOperation :public Operation {
public:
virtual double GetResult()
{
return numberA + numberB;
}
};

class SubOperation :public Operation {
public:
virtual double GetResult()
{
return numberA - numberB;
}
};

class MulOperation :public Operation {
public:
virtual double GetResult()
{
return numberA*numberB;
}
};

class DivOperation :public Operation {
public:
virtual double GetResult()
{
if (numberB == 0)
cout << "被除数不能为0" << endl;
else
{
return numberA / numberB;
}
}
};

class IFactory {
public:
virtual Operation* creatOperation() = 0;
};

class AddFactory :public IFactory {
public:
virtual Operation* creatOperation()
{
return new AddOperation();
}
};

class SubFactory :public IFactory {
public:
virtual Operation* creatOperation()
{
return new SubOperation();
}
};

class MulFactory :public IFactory {
public:
virtual Operation* creatOperation()
{
return new MulOperation();
}
};

class DivFactory :public IFactory {
public:
virtual Operation* creatOperation()
{
return new DivOperation();
}
};


客户端部分

int main()
{
IFactory* pIFactory = new AddFactory();
Operation* pOperation = pIFactory->creatOperation();
pOperation->numberA = 25;
pOperation->numberB = 35;
cout << pOperation->GetResult() << endl;


system("pause");
return 0;
}