1.定义
Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2.简介
- 为了实现同样的构建过程可以创建不同的表现。
- 先把构建过程独立出来,在生成器模式中把它称为指导者,由它来指导装配过程,但是不负责每步具体的实现。
- 必须要有能具体实现每步的对象,在生成器模式中称这些实现对象为生成器。
- 指导者就是可以重用的构建过程,而生成器是可以被切换的具体实现。前面的实现中,每种具体的导出文件格式的实现就相当于生成器。
- 这个构建的过程是统一的,固定不变的,变化的部分放到生成器部分了,只要配置不同的生成器,那么同样的构建过程,就能构建出不同的产品表示来。
参考:【创建型模式五】生成器(Builder)
3.类图
![](https://img.haomeiwen.com/i5613468/bd234ec6801d9130.png)
4.实例
package designMode;
import java.io.IOException;
/**
* Created by admin on 2017/10/19.
*/
public class BuilderPattern {
public static void main(String[] args) throws IOException {
QiRuiBuilder qiRuiBuilder = new QiRuiBuilder();
Director director = new Director(qiRuiBuilder);
director.construct();
System.out.println("输出到文本文件的内容:\n"+qiRuiBuilder.getCar().getName());
BMWBuilder bmwBuilder = new BMWBuilder();
Director director1 = new Director(bmwBuilder);
director1.construct();
System.out.println("输出到文本文件的内容:\n"+bmwBuilder.getCar().getName());
}
}
interface Builder{
void prepare();
void pack();
void finish();
Car1 getCar();
}
class BMWBuilder implements Builder{
@Override
public void prepare() {
}
@Override
public void pack() {
}
@Override
public void finish() {
}
@Override
public Car1 getCar() {
return new BMWCar1("宝马");
}
}
class QiRuiBuilder implements Builder{
@Override
public void prepare() {
//子类定义
}
@Override
public void pack() {
}
@Override
public void finish() {
}
@Override
public Car1 getCar() {
return new QiRuiCar1("奇瑞");
}
}
class Director{
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct(){
builder.prepare();
builder.pack();
builder.finish();
}
}
abstract class Car1{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class BMWCar1 extends Car1{
public BMWCar1(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class QiRuiCar1 extends Car1{
public QiRuiCar1(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
网友评论