简介:
建造者模式:使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
建造者模式的角色:
1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3、Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4、Product:要创建的复杂对象。
案例演示和代码实现:
这里还是用造车的例子来实现代码。造一个车子需要造,发动机,变速箱,悬挂才能造好一个车子。
- 1、Product(要创建的复杂对象):
建成一个对象Car:
public class Car {
private String engine;
private String gearBox;
private String suspension;
public String getEngine() {
return engine;
}
public String getGearBox() {
return gearBox;
}
public String getSuspension() {
return suspension;
}
public void setEngine(String engine) {
this.engine = engine;
}
public void setGearBox(String gearBox) {
this.gearBox = gearBox;
}
public void setSuspension(String suspension) {
this.suspension = suspension;
}
}
- 2、Builder(给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建):
public interface CarBuilderInterFace {
public void buildEngine(); //造发动机
public void buildGearBox();//造变速箱
public void buildsuspension(); //造悬挂
Car buildCar(); //组装汽车
}
- 3、ConcreteBuilder(实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例):
public class CarBuilder implements CarBuilderInterFace {
Car car;
public CarBuilder(){
car = new Car();
}
@Override
public void buildEngine() {
car.setEngine("建造发动机");
}
@Override
public void buildGearBox() {
car.setGearBox("建造变速箱");
}
@Override
public void buildsuspension() {
car.setSuspension("建造悬挂");
}
@Override
public Car buildCar() {
return car;
}
}
- 4、Director(调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建):
public class CarDirector {
public Car constructCar(CarBuilder carBuilder){
//按照 发动机--->变速箱--->悬挂 的顺序造车
carBuilder.buildEngine();
carBuilder.buildGearBox();
carBuilder.buildsuspension();
return carBuilder.buildCar();
}
}
- 5、测试
public class CarTest {
public static void main(String[] args) {
CarDirector carDirector = new CarDirector();
Car car = carDirector.constructCar(new CarBuilder());
System.out.println(car.getEngine());
System.out.println(car.getGearBox());
System.out.println(car.getSuspension());
}
}
以上文章参考地址:https://www.cnblogs.com/kangsir/p/6653233.html, 所有代码作者自己纯手写。