建造者模式(Builder)
与抽象工厂的区别:在建造者模式里,有个指导者(Director),由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造者模式可以强制实行一种分步骤进行的建造过程。
建造者模式四要素:
1.产品类Product:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。
2.抽象建造者类Builder: 将建造的具体过程交与它的子类来实现,这样更容易扩展。
3.建造者类ConcreteBuilder: 组建产品;返回组建好的产品。
4.指导类Director: 负责调用适当的建造者来组建产品,指导类一般不与产品类发生依赖关系,与指导类直接交互的是建造者类。
建造者模式优点:
1.建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在指导者类中对整体而言可以取得比较好的稳定性。
2.建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成。
适用场景
需要生成的对象具有复杂的内部结构;需要生成的对象内部属性本身相互依赖。
class Car {
//frame
String frame;
//engine
String engine;
//wheel
String wheel;
//...
}
interface Builder {
void buildFrame();
void buildEngine();
void buildWheel();
Car buildCar();
}
//911制造者
class Builder911 implements Builder {
Car car = new Car();
@Override
public void buildFrame() {
System.out.println("制造911骨架");
}
@Override
public void buildEngine() {
System.out.println("制造911引擎");
}
@Override
public void buildWheel() {
System.out.println("制造911引擎");
}
@Override
public Car buildCar() {
System.out.println("911汽车各部组装完毕");
return car;
}
}
//Cayma制造者
class BuilderCayma implements Builder {
Car car = new Car();
@Override
public void buildFrame() {
System.out.println("制造Cayma骨架");
}
@Override
public void buildEngine() {
System.out.println("制造Cayma引擎");
}
@Override
public void buildWheel() {
System.out.println("制造Cayma轮子");
}
@Override
public Car buildCar() {
System.out.println("Cayma汽车各部组装完毕");
return car;
}
}
//指导者
class Director {
private Builder builder;
//传入具体制造者
public Director(Builder builder) {
this.builder = builder;
}
public Car build() {
//制造汽车各个组件
builder.buildFrame();
builder.buildEngine();
builder.buildWheel();
return builder.buildCar();
}
}
public class Main {
public static void main(String[] args) {
//制造一台911
Builder builder = new Builder911();
Director director = new Director(builder);
Car car911 = director.build();
//制造Cayma
Builder build = new BuilderCayma();
Director dir = new Director(build);
Car caym = dir.build();
}
}
结果
制造911骨架
制造911引擎
制造911引擎
911汽车各部组装完毕
制造Cayma骨架
制造Cayma引擎
制造Cayma轮子
Cayma汽车各部组装完毕