C++设计模式之Builder(建造者)模式

/ 0评 / 0

Published by orzz.org(). (http://orzz.org/c%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e4%b9%8bbuilder%e5%bb%ba%e9%80%a0%e8%80%85%e6%a8%a1%e5%bc%8f/)

我们可能会遇到这种情况,比如一个配置文件读取模块,它由几个小模块组成,每个小模块负责读取一种类型的配置.我们读取配置的顺序和过程是固定的,但是每个配置类型可能会因为业务的需求发生很多变化.

这个过程和造房子有点像.每栋楼的建造过程是差不多的,但是各个部件在每栋楼里各不相同.

有没有这样一种模式,可以帮我们应对这种复杂对象的各个部分频繁变化的需求呢?

建造者模式就是这样一种模式.它提供一种"封装机制"来隔离出"复杂对象的各个部分"的变化,从而保持系统中的"稳定构建算法"不随着需求改变而改变.其类图如下:

我们以随意构建一个拓展的字符串数组为例子,完整示例代码如下:

代码运行结果如下:

CDirector类作为指导者,接收外部传递的参数自动控制建造者构建我们需要的产品对象.这里的CDirector::GetBuilder的内部逻辑有点类似简单工厂.

其实从上面的代码来看,建造者模式就是在工厂模式的基础上增加了一个中间的建造层,用来管理动态变化的小模块建造过程.最后生产出来的产品实际上是由各个不同小模块以相同方式拼接成的同类型大模块.那么在实际开发中,我们往往可以将CDirector与IBuilder合二为一,让IBuilder自身来管理统一的建造过程.

建造者和工厂模式之间的区别在于着重点不同.工厂模式着眼于构建相同接口但内部实现完全不同的各种对象;建造者模式着眼于构建某个内部子模块经常发生变化的稳定大模块.

Published by orzz.org(). (http://orzz.org/c%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e4%b9%8bbuilder%e5%bb%ba%e9%80%a0%e8%80%85%e6%a8%a1%e5%bc%8f/)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据