这是一段防爬虫文字,读者可跳过
本文为CSDN作者“看,未来”原创,我的CSDN地址为 https://lion-wu.blog.csdn.net/
本篇隶属于我的专栏 - 《设计模式 之 设计模式进阶》https://blog.csdn.net/qq_43762191/category_10059121.html
作者版权,未经允许,禁止转载。
文章目录
- 多道工艺打造极佳产品
- 代码实现
- 我的感悟
- 建造者模式定义
- 建造者模式应用
- 优势
- 使用场景
- 注意事项
多道工艺打造极佳产品
今天,他突发奇想,为什么做汉堡就得是那个顺序呢?为什么不能先把肉烤好,然后凉一会?为什么不能先挤奶油然后把带着奶油的面包拿去烤?为什么要用生菜不用熟菜?
他想着,就决心变革。但是他跟他的员工讲不通啊,员工不理解他,他怒了,他把自己能想到的搭配顺序列成abcdefg等计划,然后告诉员工:“你,给我去做A计划”、“你,给我去做B计划”、“你,给我去做C计划”···
于是一切就这样井然有序的执行了。
那么这件事中涉及到些什么呢?
首先涉及到上一篇 模板方法模式,我说了这俩模式契合度挺高。
然后还涉及到老板那天马行空的abcdefg,是吧,乍一看,好多个模板套一起,咋整?那就是“建造者模式”!
那我们来化成图:
代码实现
#include<iostream>
#include<list>
using namespace std;
class abstracthumber {
public:
virtual void bread() = 0;
virtual void barbecue() = 0;
virtual void cream() = 0;
virtual void lettuce() = 0;
void run() //将共同的核心算法流程提炼到抽象类
{
for (list<string>::iterator it = order->begin(); it != order->end(); it++)
{
if (*it == "bread")
this->bread();
else if (*it == "beef")
this->barbecue();
else if (*it == "cream")
this->cream();
else if (*it == "lettuce")
this->lettuce();
}
}
void set_order(list<string>* s) { this->order = s; }
private:
list<string>* order;
};
class chicken :public abstracthumber {
public:
void bread() { cout << "鸡腿堡的面包" << endl; }
void barbecue() { cout << "鸡腿堡的鸡腿" << endl; }
void cream() { cout << "鸡腿堡的奶油" << endl; }
void lettuce() { cout << "鸡腿堡的生菜" << endl; }
};
class beef :public abstracthumber {
public:
void bread() { cout << "牛肉堡的面包" << endl; }
void barbecue() { cout << "牛肉堡的鸡腿" << endl; }
void cream() { cout << "牛肉堡的奶油" << endl; }
void lettuce() { cout << "牛肉堡的生菜" << endl; }
};
int main()
{
abstracthumber* a = new chicken();
abstracthumber* b = new beef();
list<string> sa ;
sa = { "bread","beef","cream","lettuce" };
a->set_order(&sa);
a->run();
list<string> sb;
sb = { "beef","bread","cream","lettuce" };
b->set_order(&sb);
b->run();
}
我的感悟
如果你是要做一个生产车间,我建议使用模板方法模式,那个不用对流程有太大改变,不需要你天马行空的设计,一切是那么的顺其自然。
如果你要做的是一个乐高积木,那我建议你使用建造者模式,这个模式可以满足你所有的想象,只要你有零件。
建造者模式定义
将一个复杂对象的内部构建与它的表示分离,使得同样的构造过程可以创建不同的表示
在建造者模式中,有如下四个角色:
- 产品类
- 抽象建造者
- 具体建造者
- 导演类(本例中并入main)
建造者模式应用
优势
- 封装性
- 建立者独立,容易拓展
- 便于控制细节风险
使用场景
- 相同的方法,不同的执行顺序吗,产生不同的事件结果。
- 多个部件或零件,都可以包装到一个对像中,但是产生的运行结果又不相同。
- 产品类非常复杂,或者产品类中的调用顺序不同产生不同的效能。
注意事项
建造者模式关注的是零件类型和装配工艺,这是它与工厂模式最大的不同,在使用建造者模式的时候考虑一下模板方法模式,别孤立思考一个模式。
对于工厂模式,重点是创建,创建零件是它的职责,组装顺序不是它该关心的。
好,今天先到这里,明天有点忙,希望能续更。
下一篇:《代理模式》