Java实现建造者模式
建造者模式是一种创建型设计模式,它的目的是将一个复杂的对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
适用场景:
1. 当一个对象的构建过程比较复杂,需要多个步骤以特定顺序执行时,可以使用建造者模式。例如,一个汽车的构建过程包括创建车身、安装发动机、安装轮胎等多个步骤,每个步骤都有特定的顺序。
2. 当相同的构建过程可以创建不同表示时,也适合使用建造者模式。例如,汽车的构建过程可以创建轿车、SUV、跑车等不同的类型。
好处:
建造者模式的好处包括:
1. 解耦构建过程和表示,使得代码结构更加清晰。
2. 可以通过控制不同的建造者,创建不同的表示对象。
3. 建造者模式可以复用相同的构建过程来构建不同的对象。
下面是一个简单的Java代码示例:
// 产品类,即要构建的复杂对象
class Car {
private String engine;
private String tire;
public void setEngine(String engine) {
this.engine = engine;
}
public void setTire(String tire) {
this.tire = tire;
}
@Override
public String toString() {
return "Car{" +
"engine='" + engine + '\'' +
", tire='" + tire + '\'' +
'}';
}
}
// 抽象建造者类,定义构建过程的抽象方法
abstract class CarBuilder {
protected Car car;
public void createCar() {
car = new Car();
}
public abstract void buildEngine();
public abstract void buildTire();
public Car getCar() {
return car;
}
}
// 具体建造者类,实现构建过程的具体方法
class SedanCarBuilder extends CarBuilder {
@Override
public void buildEngine() {
car.setEngine("Sedan Engine");
}
@Override
public void buildTire() {
car.setTire("Sedan Tire");
}
}
class SUVCarBuilder extends CarBuilder {
@Override
public void buildEngine() {
car.setEngine("SUV Engine");
}
@Override
public void buildTire() {
car.setTire("SUV Tire");
}
}
// 指挥者类,负责构建对象
class Director {
private CarBuilder carBuilder;
public void setCarBuilder(CarBuilder carBuilder) {
this.carBuilder = carBuilder;
}
public Car construct() {
carBuilder.createCar();
carBuilder.buildEngine();
carBuilder.buildTire();
return carBuilder.getCar();
}
}
// 客户端代码
public class BuilderPatternExample {
public static void main(String[] args) {
Director director = new Director();
CarBuilder sedanCarBuilder = new SedanCarBuilder();
director.setCarBuilder(sedanCarBuilder);
Car sedanCar = director.construct();
System.out.println("Sedan Car: " + sedanCar);
CarBuilder suvCarBuilder = new SUVCarBuilder();
director.setCarBuilder(suvCarBuilder);
Car suvCar = director.construct();
System.out.println("SUV Car: " + suvCar);
}
}
输出结果:
Sedan Car: Car{engine='Sedan Engine', tire='Sedan Tire'}
SUV Car: Car{engine='SUV Engine', tire='SUV Tire'}
以上示例中,Car为要构建的复杂对象,CarBuilder为抽象建造者类,定义了构建过程的抽象方法。SedanCarBuilder和SUVCarBuilder为具体建造者类,实现了构建过程的具体方法。Director为指挥者类,负责构建对象。客户端代码通过设置不同的建造者来构建不同类型的Car对象。