工厂模式 factoryMethod
1 定义
定义一个勇于创建产品对象的工厂接口,让工厂子类决定实例化哪一个产品类
2 设计思想
其实就是客户需要什么类,就去创建什么具体的类。具体类的实现并不是由工厂来实现的,而是由客户自己决定到底是创建哪个类。
(但是我个人感觉有点奇怪啊,客户怎么知道到底有哪些类呢??,但是同样的,简单工厂模式,客户也是不知道都有哪些类的,所以这个不重要,哈哈哈哈哈)
3 结构类图
4 常用场景
主要是生成复杂对象实例,尝试使用工厂模式来代替。就是并不对外暴露该对象的实现,用户不用关心如何实现的。
明确的分割创建对象和 管理对象的职责。
简单工厂模式:适用于产品种类比较少,获取扩展的概率比较低的情况。
4 具体的代码例子
#include <iostream>
// 使用计算器来作为例子
class Produce
{
public:
virtual int operation(int a, int b) = 0;
virtual ~Produce()
{
}
};
class ProduceAdd:public Produce
{
public:
int operation(int a, int b) override
{
return a + b;
}
};
class ProduceMul:public Produce
{
public:
int operation(int a, int b) override
{
return a * b;
}
};
// 定义工厂
class Factory
{
public:
virtual Produce* create_product() = 0;
virtual ~Factory()
{
}
};
class FactoryAdd:public Factory
{
public:
Produce *create_product()override
{
return new ProduceAdd();
}
};
class FactoryMul:public Factory
{
public:
Produce *create_product()override
{
return new ProduceMul();
}
};
#endif
// 进行测试
1 #include "factoryMethod.h"
2 #include <iostream>
3
4 using namespace std;
5
6 int main()
7 {
8 // 使用,都是先创建工厂,之后在创建产品,然后消耗产品
9 Factory *factoryAdd = new FactoryAdd();
10 Factory *factoryMul = new FactoryMul();
11
12 Produce *productAdd = factoryAdd->create_product();
13 Produce *produceMul = factoryMul->create_product();
14
15 int res1 = productAdd->operation(1,2);
16 cout << "add(1,2) = " << res1 << endl;
17
18 cout << "mul(1,2) = " << produceMul->operation(1,2) << endl;
19
20 delete produceMul;
21 delete productAdd;
22 delete factoryAdd;
23 delete factoryMul;
24
25 return 0;
26 }
27
// 输出结果
add(1,2) = 3
mul(1,2) = 2
缺点:每次重新创建一个产品的时候,就需要新建一个工厂,类的数量增加较多,类之间的关系比较复杂。
标签:int,class,FactoryMethod,Factory,模式,工厂,Produce,public From: https://www.cnblogs.com/moxianbaolianxisheng/p/16609835.html