§1 定义
- 建造者模式将一个复杂对象的构建与装配分离,实现构建与装配的解耦,如:单车(复杂对象)由车座、车架等配件组装而成,建造者模式将这些配件和使用配件组装成单车的过程分开,一步一步组装成单车,用户只需要指定单车的配件即可,无须知道配件的具体细节。
§2 角色
- 产品类(Product):待创建的复杂对象,如:单车。
- 抽象建造者类(Builder):定义装配复杂对象需要使用到的组件,不涉及具体部件的创建,如:车架、车座等。
- 具体建造者类(ConcreteBuilder):实现或继承 Builder,完成复杂对象各个部件的创建。
- 指挥者类(Director):使用具体建造者创建的复杂对象的组件,负责将各个组件装配成复杂对象,如:使用车架、车座等配件装配出一辆单车。
§4 单车案例
§4.1 类图
§4.2 实现
public class Bike {
private String frame;
private String seat;
public String getFrame() {
return frame;
}
public void setFrame(String frame) {
this.frame = frame;
}
public String getSeat() {
return seat;
}
public void setSeat(String seat) {
this.seat = seat;
}
}
public abstract class Builder {
protected Bike mBike = new Bike();
public abstract void buildFrame();
public abstract void buildSeat();
public abstract Bike createBike();
}
public class MobikeBuilder extends Builder {
@Override
public void buildFrame() {
mBike.setFrame("摩拜单车车架");
}
@Override
public void buildSeat() {
mBike.setSeat("摩拜单车车座");
}
@Override
public Bike createBike() {
return mBike;
}
}
public class OfoBuilder extends Builder {
@Override
public void buildFrame() {
mBike.setFrame("Ofo单车车架");
}
@Override
public void buildSeat() {
mBike.setSeat("Ofo单车车座");
}
@Override
public Bike createBike() {
return mBike;
}
}
public class Director {
private Builder mBuilder;
public Director(Builder builder) {
this.mBuilder = builder;
}
public Bike construct() {
mBuilder.buildFrame();
mBuilder.buildSeat();
return mBuilder.createBike();
}
}
public class Client {
public static void main(String[] args) {
showBike(new MobikeBuilder());
showBike(new OfoBuilder());
}
public static void showBike(Builder builder) {
Director director = new Director(builder);
Bike bike = director.construct();
System.out.println(bike.getFrame());
System.out.println(bike.getSeat());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
§5 优缺点
- 优点
- 将产品本身与产品的创建过程解耦,客户端无须知道产品的内部细节。
- 扩展性好,如果有新的需求,可以通过定义一个新的建造者类来实现。
- 缺点
- 使用范围受限制。建造者模式创建的产品一般具有较多的共同点,组成部分是相似的,如果产品之间的差异性较大,是不适用建造者模式的。