一天一个设计模式-Builder

Builder 模式

最近买了一个乐高美国队长,为了拼出它那张萌脸,花了我半个小时呢。

言归正传,像这样用一块块积木搭建起来,从简单到复杂,自下而上,一个模块一个模块组装的设计模式,我们把它叫做Builder模式。

示例程序

我们来试着体验一下 Builder 设计模式。

OK,我们现在手头有几个东西。

标题

几串字符串

包含几个条目

我们用这些组件来实现两种不同 “文档” 的编写。

纯文本输出格式

HTML 格式

我们假设现在这个文档的编写流程如下:

写一个标题

写一个字符串

写几条条目

再写一个字符串

再写几条条目

好了,接下来我们用代码来说明。

Builder

首先我们定义一个 Builder 类,表示编写文档的抽象类,里面包含编写文档的几个必要步骤。

makeTitle() : 编写标题

makeString() : 编写内容

makeItems() : 编写条目

close() : 结束编写文档

Director

然后我们定义一个编写文档的流程,这有点像我们在拍电影的剧本,调用 Builder 中的组件,然后把它们一个一个组装起来。

TextBuilder

然后我们来实现第一种 Builder ,用纯文本编写文档,具体实现编写标题、编写内容、编写条目的方法。

HTMLBuilder

同上,我们再实现用 HTML 格式编写文档的方法。

Main

我们现在来测试一下两种编写文档的效果。

纯文本结果:

HTML 结果:

在浏览器里瞅瞅。

代码地址: https://github.com/MrNullPoint/BuilderExp

解惑

各司其职

现在我们回忆一下,用拍电影的流程来解释一下刚刚的过程。Builder 类申明我们有哪些角色,Director 类就像导演一样,把这些角色按照一个剧本串联起来,TextBuilder 类和 HTMLBuilder 类就像演员一样,负责用不同的方式具体实现这些角色。

现在你对Builder模式理解了吗?

还有疑惑的小伙伴可以在公众号里留言哦。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180306G1N46A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券