建造者模式(Builder)辽俗,將一個復(fù)雜對象的構(gòu)建與它的表示分離无牵,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示茬祷。
建造者模式主要用于創(chuàng)建一下復(fù)雜的對象,這些對象內(nèi)部構(gòu)件的建造順序通常是穩(wěn)定的竟终,但對象內(nèi)部的構(gòu)建通常面臨復(fù)雜的變化蝠猬。
建造者模式主要涉及4個部分:
- 抽象建造者:定義創(chuàng)建一個產(chǎn)品對象的各個部件的接口。
- 具體建造者:實現(xiàn)抽象建造者统捶,構(gòu)造和裝配各個部件榆芦。
- 指揮者:構(gòu)建一個使用抽象建造者的對象。
- 具體產(chǎn)品:產(chǎn)品本身喘鸟。
生產(chǎn)一輛車匆绣,需要建造發(fā)動機、車輪等什黑,車輛在這里就是具體產(chǎn)品崎淳。車輛建造者定義了建造發(fā)動機、車輪的接口愕把,承擔了抽象建造者的角色拣凹。小轎車建造者是一個具體的建造者,用于建造小轎車這一個類型恨豁。指揮者負責組裝車輛嚣镜。
建造者模式類圖
- 車輛
public class Vehicle {
List<String> partList = new ArrayList<>();
public void addPart(String part) {
partList.add(part);
}
public void show() {
for (String part : partList) {
System.out.println(part);
}
}
}
- 車輛建造者
public interface VehicleBuilder {
void buildEngine();
void buildWheel();
Vehicle getVehicle();
}
- 小轎車建造者
public class SedanBuilder implements VehicleBuilder {
private Vehicle vehicle = new Vehicle();
@Override
public void buildEngine() {
vehicle.addPart("one engine");
}
@Override
public void buildWheel() {
vehicle.addPart("four wheel");
}
@Override
public Vehicle getVehicle() {
return vehicle;
}
}
- 指揮者
public class Director {
private VehicleBuilder vehicleBuilder;
public Director(VehicleBuilder vehicleBuilder) {
this.vehicleBuilder = vehicleBuilder;
}
public void assembleCar() {
vehicleBuilder.buildEngine();
vehicleBuilder.buildWheel();
}
}
- 客戶端測試類
public class Client {
public static void main(String[] args) {
VehicleBuilder vehicleBuilder = new SedanBuilder();
Director director = new Director(vehicleBuilder);
director.assembleCar();
Vehicle vehicle = vehicleBuilder.getVehicle();
vehicle.show();
}
}
運行結(jié)果:
one engine
four wheel
建造者模式實現(xiàn)了建造代碼與表示的分離,產(chǎn)品的內(nèi)部表示由具體建造者負責橘蜜,而組裝過程遷移到指揮者來單獨實現(xiàn)菊匿。并且具體建造者之間是相互獨立的,有利于程序的擴展,如果需要修改產(chǎn)品的內(nèi)部表示捧请,只需要再定義一個具體的建造者就可以了凡涩。