
设计模式-05-建造者模式
个人github地址:HibisciDai
设计模式系列项目源码:HibisciDai/DesignPattern-LearningNotes-HibisciDai
processon在线UML类图:processon
[TOC]
设计模式-05-建造者模式
建造者模式(Builder Pattern)
意图
将一个复杂对象的创建与表示分离,使得同样的创建过程可用不同的表示。
主要解决
主要解决在软件系统中,有时候面临着”一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
何时使用
一些基本部件不会变,而其组合经常变化的时候。
关键代码
建造者:创建和提供实例。
导演:管理建造出来的实例的依赖关系。
如何解决
将变与不变分离开。
应用实例
- 去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的”套餐”。
- JAVA 中的 StringBuilder。
优点
当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点
- 建造者独立,易扩展。
- 便于控制细节风险。
注意事项
与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。
案例1
杯子构造过程。
类图

代码
pattern05.bulider.demo1
java
1 | public class Director { |
目标对象:
java
1 | public class Cup { |
测试输出
java
1 | public class Main { |
shell
1 | SportCup-String |
案例2
对话框构建过程。
类图

代码
pattern05.bulider.demo2
java
1 | public abstract class MyBulider { |
构建对象
java
1 | public class Diolog { |
测试输出
java
1 | public class Main { |
shell
1 | Conform-title |
补充
Bulider
限定名在java中有指定类,代码例中更改为MyBulider
。对于
Builder
中引用指定对象需要打破封装,即透视目标构建配件的结构,并声明为自己的成员变量,即目标对象与建造者有相同的成员变量。关于两个案例中
Director
类构造有些不同导致方法调用有不一样。
案例一
java
1 | public class Director { |
案例二
java
1 | public class Director { |