建造者模式属于创建型模式,就是要更好的创建对象。很多时候我们创建一个对象的过程是十分复杂的,这种复杂性主要的原因是因为一个对象的各个部件十分的复杂或者是非常零散,需要使用该对象如果去临时组装会非常的麻烦,关键是客户端并不关心这种组装的过程而只需要指定的对象,建造者模式就是这样的设计模式,可以让我们直接获取建造好的对象。先看UML图。
建造者模式涉及到的角色有四个
Product : 产品的接口,就是我们最终制造出来的产品,通常是一个抽象类或者接口,定义产品的基本函数。
builder : 创建者接口,负责定义抽象的需要创建的函数。
ConcreateBuilder : 具体的创建者接实现,完成具体创建细节。
Director : 导演类,维护一个创建接口完成创建。
例子,汽车的组装是固定的,但是不同的零件有可能设计是非常不同的,我们就是要将不同的轮子和发动机组装起来。
产品角色Car与两个具体的实现。
abstract class Car {
protected String wheel,engine;
protected abstract String getName();
void setWheel(String wheel) {
this.wheel = wheel;
};
void setEngine(String engine) {
this.engine = engine;
};
void printConf() {
System.out.println(getName() + " conf : wheel is " + wheel + ",engine is "+ engine);
};
}
class BMW extends Car {
@Override
protected String getName() {
return "BMW";
}
}
class Tesla extends Car {
@Override
protected String getName() {
return "Tesla";
}
}
Builder接口:
interface Builder {
void construct(String engine, String wheel);
public Car getCar();
}
具体的建造者角色:
class TeslaBuilder implements Builder{
Car car = new Tesla();
public void construct(String engine, String wheel) {
car.setEngine(engine);
car.setWheel(wheel);
}
public Car getCar() {
return car;
}
}
导演类:
class Director {
Builder builder = null;
Director(Builder builder) {
this.builder = builder;
}
public Car getCar () {
builder.construct("v8", "40cm");
return builder.getCar();
}
}
客户端调用:
Director director = new Director(new TeslaBuilder());
Car car = director.getCar();
car.printConf();
建造者模式和工厂模式非常相似,确实是非常的相似,建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程。