在建造大楼时,需要先打牢地基,搭建框架,然后自下而上地一层一层盖起来。通常,在建造这种具有复杂结构的物体时,很难一气呵成。我们需要首先建造组成这个物体的各个部分,然后分阶段将它们组装起来。(可以理解为按照模块组装)
### 具体职责
- Builder 为你实现主逻辑要实现的抽象方法
- Director 为你具体使用builder完成具体的逻辑使用代码 就是调用Builder的函数实现实际功能
- Director类不知道自己使用的究竟是Builder类的哪个子类也好。这是因为“只有不知道子类才能替换”。不论是将TextBuilder的实例传递给Director,还是将HTMLBuilder类的实例传递给Director,它都可以正常工作,原因正是Director类不知道Builder类的具体的子类。
- xxxx 任何多个具体的实现类
扩展: 这里可以联想到Template Method 设计模式中 由父类控制 子类的使用过程,但是这里换了对象
|Builder 定义了决定文档结构的方法的抽象类
|Director 编写1个文档的类
|TextMovieBuilder| 使用纯文本(普通字符串)编写电影文档的类
|HTMLMovieBuilder| 使用HTML编写电影文档的类
|Main| 测试程序行为的类
### UML
时序图:
例子实现code:
Builder:
’Builder角色负责定义用于生成实例的接口(API)。Builder角色中准备了用于生成实例的方法。
在示例程序中,由Builder类扮演此角色。
1 public abstract class Builder { 2 3 4 5 abstract void makeMovieTitile(String title); 6 7 8 9 abstract void makeMovieBody(String body); 10 11 12 13 abstract void makeMovieItem(String [] items); 14 15 16 17 abstract void close(); 18 19 20 21 }