一、简介
建造者模式用于组装具有复杂结构的实例。
明确:
- 建造的对象—要建造谁?
- 建造的对象的构成—该对象有哪几
子部分
构成?用什么方法构造? - 建造该对象的方式有几种?
二、角色组成
1. Builder类
Builder
类是一个抽象类,定义了构造复杂结构实例的各个子部分
的方法—构造这个复杂实例需要构造哪些子部分
。
2. Director类
Director
类负责操作Builder
来创建复杂实例对象。
3. ConcreteBuilderA
构造目标对象可能可以有很多中方法。
ConcreteBuilderA
继承了Builder
,定义了如何用方法A构造复杂实例对象.
4. ConcreteBuilderB
ConcreteBuilderB
继承了Builder
,定义了如何用方法B构造复杂实例对象.
三、示例
现在我们需要用Builder模式编写一个创建文档的程序。
明确:
- 构造的对象:文档
- 构造的对象的组成:文档标题title、文档正文content、文档结尾Tail。
- 构造文档的方法:文本、html。
编写类
Builder类
里面有构造文档对象需要的各个操作。
public abstract class DocumentBuilder {
public abstract void addTitle();
public abstract void addContent();
public abstract void addTail();
public abstract String getDetails();
}
TextBuilder
用文本生成文档
public class TextBuilder extends DocumentBuilder{
public void addTitle(){
System.out.println("用文本生成Title");
}
public void addContent(){
System.out.println("用文本生成Content");
}
public void addTail(){
System.out.println("用文本生成Tail");
}
}
HtmlBuilder
用html生成文档
public clas HtmlBuilder extends DocumentBuilder{
public void addTitle(){
System.out.println("用Html生成Title");
}
public void addContent(){
System.out.println("用Html生成Content");
}
public void addTail(){
System.out.println("用Html生成Tail");
}
}
Director类
根据传入的ConcreteBuilder,操作builder生成文档
public class Director{
DocumentBuilder documentBuilder;
Director(DocumentBuilder documentBuilder){
this.documentBuilder = documentBuilder;
}
void construct(){
documentBuilder.addTitle();
documentBuilder.addContent();
documentBuilder.addTail();
}
}
调用实现
TextBuilder textBuilder = new TextBuilder();
Director director = new Director(textBuilder);
director.construct();
HtmlBuilder htmlBuilder = new HtmlBuilder();
Director director1 = new Director(textBuilder);
director1.construct();