【01 】 builder设计模式 - 类图
【02】理论理解
(01) 在理解Builder模式时,其一,要分清整体(在Builder中整体是由多个部分或者局部部件组成的,如手机是一个整体,它是由屏幕、外壳、电池、CPU主板等局部的部件组成的)与局部部件的关系。其二,要理解产品固定部分(这里的部分不是组成部分,从类的角度上分的,一个类由行为及属性两部分组成,这里的部分就是类的部分)与变动部分(Product的固定部分与变动部分,如果Product是手机,那么手机的各个局部的组件创建过程是固定的,即它的结构是固定的,结构固定就表明了他的创建过程是固定的。注意这里创建是从整体的角度,为什么要强调这一点,对后面的局部谈创建局部部件区别开来,即其一讲的问题。那么手机的变动部分是什么,它的局部的部件是变动的,如一个手机的CPU,如果装上华为的CPU那么可能就是华为的手机,但绝对不可能是苹果的,如果一个手机装上的局部部件CPU是苹果的,那么就可能是苹果的,其他局部部分的变动也是亦然。)。这一点理解很重要,否则你在看设计模式书本时,里面有提到这个创建的,那里创建的,如果你不清楚,是整体的创建(在Director中)还是局部的创建(Builder),那么,可能会陷入似懂非懂的局面。你可能看不清这两个类的区别,一个是Product的整体创建算法类即Director,这些是(手机)固定部分,一个是各个Product所有个局部部件的创建的类即Builder,这些是变动部分。
(02) Builder设计模式的使用场景,一般应该是使用在整体产品(如手机)结构是固定的(先不一开始就复杂化,比如你可能说,华为的手机结构上与苹果还是有差异的,如果你这样复杂化理解,我觉得对你抽象一个事物没有什么好处,开始先循序渐进,就像我学数学,先从有理的开始,才到无理的等,你先抽象在一个简单的情况下,然后等到自己将设计模式玩得出神入化了,才转入复杂化去深入探索,学模式我个人理解,是为了达到“招式”中没有模式的形,但有模式的神。毕竟实际中很少有完完全全吻合教条)而局部各个组件是变动的(如果某局部组件名字虽然相同拥有的基本功能相同,但材料不同,性能的强弱不同,此局部组的创建过程是不相同的)。
(03)注意,从图上可以看出在Builder类跟Product类没有关联,但是ConcreteBuilder 跟Product则是依赖关系,代码表现形式是Product是ConcreteBuilder 类的成员函数的返回值或者成员函数的参数。Builder对调用者一般是不可见的,但是用户并不关心产品的创建过程,用户关心的是产品的表现,即外形表现。
【03】实践代码及分析
TODO
【 比较好的参考资料 】
1)C++设计模式-生成器
http://blog.chinaunix.net/uid-20665047-id-3626762.html
注:此文的文字说明很不错,但是代码部分,我个人觉得的有问题。
2)C++ UML类图详解
https://blog.youkuaiyun.com/CLinuxF/article/details/88060140
3)【设计模式】C++设计模式
https://www.bilibili.com/video/BV1c4411a7wk?p=11
4)C++设计模式-Builder建造者模式
https://www.cnblogs.com/jiese/p/3161076.html
此链接的源码举例很好,很多builder都没有对product类操作,此例子更接近使用场景。
5)还有大话设计模式中的例子也很好。