一建造者模式介绍
将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。如MyBatis中SqlSession的创建。
建造者(Builder)模式包含以下4个角色 :
- 抽象建造者类(Builder):这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的部件对象的创建。
- 具体建造者类(ConcreteBuilder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。在构造过程完成后,提供一个方法,返回创建好的负责产品对象。
- 产品类(Product):要创建的复杂对象 (包含多个组成部件)。
- 指挥者类(Director):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建(客户端一般只需要与指挥者进行交互)。
二:具体例子(创建共享单车)
生产自行车是一个复杂的过程,它包含了车架,车座等组件的生产。而车架又有碳纤维,铝合金等材质的,车座有橡胶,真皮等材质。对于自行车的生产就可以使用建造者模式。
具体产品:
public abstract class Builder {
protected Bike myBike=new Bike();
//制作车架
public abstract void buildFrame();
public abstract void buildSeat();
public abstract Bike createBike();
}
public class HelloBikeBuilder extends Builder{
@Override
public void buildFrame() {
myBike.setFrame("哈罗的车架");
}
@Override
public void buildSeat() {
myBike.setSeat("哈罗的座椅");
}
@Override
public Bike createBike() {
return myBike;
}
}
public class MobileBikeBuilder extends Builder{
@Override
public void buildFrame() {
myBike.setFrame("摩拜的车架");
}
@Override
public void buildSeat() {
myBike.setSeat("摩拜的座椅");
}
@Override
public Bike createBike() {
return myBike;
}
}
指挥者类:
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Bike construct(){
builder.buildFrame();
builder.buildSeat();
return builder.createBike();
}
}