工厂方法模式
最后更新于:2022-04-01 20:29:20
## 模式定义:
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
## 模式结构:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-30_57c5458e6ea3f.jpg)
Creator是一个类,它实现了所有操纵产品的方法,但不实现工厂方法。Creator的所有子类都必须实现工厂方法(factoryMethod()),以实际制造出产品。
所有的产品必须实现Product基类,这样一来使用这些产品的类就可以引用这个基类,而不是派生类。
## 举例:
披萨店希望能够开一些加盟店。经营者希望确保加盟店运营的质量,所以希望这些店都使用能经过实践考研的代码。问题在于每家加盟店都可能想要提供不同风味的披萨(比方说纽约,芝加哥,加州),这收到了开店地点及该地区披萨口味的影响。
解决办法:让每个区域风味的披萨工厂继承基类披萨工厂使披萨工厂的订单系统不变,然后创建自己风味的披萨。这样真正选购披萨类型,使用具体的披萨工厂决定的。
## 类图设计:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-30_57c5458e9ed77.jpg)
## 编程实现及执行结果:
~~~
#include
#include
#include
';
-
using namespace std;
~~~
首先创建Pizza类
~~~
class Pizza
{
public:
Pizza(string nam, string doug, string sauc)
{
name = nam;
dough = doug;
sauce = sauc;
}
void addTops(string tops)
{
toppings.push_back(tops);
}
void prepare()
{
cout << "Preparing " << name << endl;
cout << "Tossing dough" << endl;
cout << "Adding sauce" << endl;
cout << "Adding toppings" << endl;
list