【C++23设计模式 】创建型模式4- builder模式

【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.csdn.net/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)还有大话设计模式中的例子也很好。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的步骤组合而成;这些的算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求改变而发生变化,此时我们可以选择使用Builder模式。尽管Builder模式相当容易让人误解,但我认为这几点应该是不会有错的。因此我个人认为Builder模式中要好好把握如下几点 1. 需要创建的对象是复杂对象 2. 对象的创建过程是一步步创建(即:可能由于过程的不同而导致有不同的对象展示) 3. 明确建造者(Builder)、具体建造者(Concrete Builder)、指导者(Director)、产品(Product)之间的职责和联系。 ◆建造者(Builder): 给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是 具体建造者(ConcreteBuilder):具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。 ◆具体建造者(Concrete Builder): 担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括: ■实现Builder角色提供的接口,一步一步完成创建产品实例的过程。 ■在建造过程完成后,提供产品的实例。 ◆指导者(Director): 担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。 ◆产品(Product): 产品便是建造中的复杂对象。 详细见博客 http://blog.csdn.net/xiaoting451292510/article/details/8330462

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值