一、建造者模式定义
定义: 建造者设计模式是一个构造复杂对象的设计模式,在一个软件系统中,可能会面临创建一个复杂对象的工作,如果使用单一的方法或者单一的对象来创建会比较烦琐,当所创建复杂对象发生改变时,整个系统就可能面临剧烈的变化。这时就需要我们将这个复杂对象的创建过程分解成若干部分,各个子部分用一定的算法构成。但是,子部分可能会经常发生变化,如何能保证整体创建工作的稳定性呢?这就需要建造者模式,建造者模式把复杂对象的创建与表示分离,使得同样的构建过程可以创建不同的表示。
二、建造者模式的使用场景
1》当生成的产品对象内部具有复杂的结构时;
2》当复杂对象需要与表示分离,可能需要创建不同的表示时;
3》当需要向客户隐藏产品内部结构的表现时。
建造者模式适用于对象结构复杂、对象构造和表示分离的情况。任何一种软件设计模式的最终目标都是实现软件的高内聚、低耦合,实现易扩展、易维护。建造者设计模式的实质是解耦组装过程和创建具体部件,使得不用去关心每个部件是如何组装的,只需要知道各个部件是干什么的(实现什么功能)。建造者模式使得产品内部的结构表现可以独立变化,客户端不需要知道产品内部结构的组成细节。抽象工厂设计模式是解决“产品系列家族”的一种模式,而建造者设计模式是解决“一个对象部分”需要变化的一种设计模式。
建造者设计模式的优点在于其构建和表示的分离,有效地将复杂对象处理过程分解,降低功能模块之间的耦合度,增强模块内部的内聚度,使得其在软件设计模式中具有极其重要的位置。
三、建造者设计模式类图
建造者模式通常包括 以下几个角色:
1》Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2》ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。在建造过程完成后,提供产品的实例。
3》Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4》Product:要创建的复杂对象。
四、建造者应用实例:
1》去肯德基,汉堡,可乐,薯条,炸鸡翅等是不变的,而其组合是经常变化的,生成数所谓的“套餐”。
2》Java 中的StringBuilder。
五、建造者模式实例
1、创建一个车的实体类
public class Car {
private String color;
private int carDoor;
private int tires;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getCarDoor() {
return carDoor;
}
public void setCarDoor(int carDoor) {
this.carDoor = carDoor;
}
public int getTires() {
return tires;
}
public void setTires(int tires) {
this.tires = tires;
}
}
2、造车
public interface CreateCar {
public void selectColor();
public void selectCarDoor();
public void selectTires();
public Car createCar();
}
3、实现车的样式
public class CreateCarImpl implements CreateCar{
Car car;
public CreateCarImpl() {
// TODO Auto-generated constructor stub
car = new Car();
}
@Override
public void selectColor() {
// TODO Auto-generated method stub
car.setColor("颜色");
}
@Override
public void selectCarDoor() {
// TODO Auto-generated method stub
car.setCarDoor(2);
}
@Override
public void selectTires() {
// TODO Auto-generated method stub
car.setTires(4);
}
@Override
public Car createCar() {
// TODO Auto-generated method stub
return car;
}
}
4、销售人员描述此车
public class CarDirector {
public CreateCar direct(CreateCar createCar){
createCar.selectCarDoor();
createCar.selectColor();
createCar.selectTires();
return createCar;
};
}
5、向客户展现此车
public class CarMain {
public static void main(String[] args) {
CarDirector director = new CarDirector();
director.direct(new CreateCarImpl());
}
}