建造者模式定义
定义:建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
先分析模型图上的四大部分:
Product:产品类,指要创建的复杂对象,通常实现了模板方法模式。
Builder:抽象建造类,规范产品的组建,一般是由子类实现的。
ConcreteBuilder:具体建造类,实现抽象建造类定义的方法并返回一个建造好的对象。
Director:导演类,也就是指挥者,负责安排流程。
实例说明
就拿建造房屋举例吧:这里假设建造两种类型的房屋,别墅和普通房屋;两种类型的建造流程顺序不同;别墅为A-B-C三步,普通房屋为C-B-A三步。
1.首先定义出Product类,VillaModel和OrdinaryhouseModel
(1).抽象产品类
|
|
(2).两个实现类
2.定义Builder抽象建造类,也就是写两种房屋的建造方式.
|
|
3.定义ConcreteBuilder具体建造类,也就是两种房屋建造类实现上面定义的Builder
|
|
注意:上面的准备工作都做完了,为了更深刻的理解Director<导演类>,我们先不加Director,直接去实现此实例。
不加入Director类,实现方式就是直接设置顺序,以建造别墅为例,代码如下:
|
|
这还只是别墅的建造,代码是不是很臃肿?所以封装是必须的,既加上Director类来指挥(封装)顺序。
4.定义Director类,也就是对已知的两种房屋的建造步骤进行封装
这时实现实例的代码如下:
|
|
运行结果:

加入了Director类后调用是不是感觉很简单,清晰了。另外如果两种房屋的建造步骤有变化了,可以直接在Director类封装新的顺序。
建造者模式应用
1.实用范围
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
当构造过程必须允许被构造的对象有不同表示时。
2.建造者模式的优缺点
(1).优点
封装性好
具体建造类之间独立,扩展性好
(2).缺点
产生多余的Build对象以及Dirextor类。
3.建**造者模式与工厂模式的区别**
这两种模式很相似,建造者模式更注重于方法的调用顺序,而工厂模式注重于创建产品。具体的区别还是推荐大家去亲身去了解一下这两种模式。
文章学习参考了《设计模式之禅》《Android进阶之光》