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模式理解了吗?
还有疑惑的小伙伴可以在公众号里留言哦。
领取 专属20元代金券
Get大咖技术交流圈