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对象。