Java建造者模式

代码实现
  • 下面是一个简单的Java建造者模式的案例,这个案例展示了一个Car类(产品类),由CarBuilder接口(构建器接口)和多个实现了这个接口的SedanCarBuilder、SUVCarBuilder类(具体构建器类)来构建。
  • 首先是Car类(产品类):
public class Car {
    private String model;
    private String engine;
    private String transmission;

    public Car(String model, String engine, String transmission) {
        this.model = model;
        this.engine = engine;
        this.transmission = transmission;
    }
    public Car(){

    }

    public String showCarDetail(){
        System.out.println("Car Model: "+model);
        System.out.println("Engine: "+engine);
        System.out.println("Transmission: "+transmission);
        return "haha";

    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getEngine() {
        return engine;
    }

    public void setEngine(String engine) {
        this.engine = engine;
    }

    public String getTransmission() {
        return transmission;
    }

    public void setTransmission(String transmission) {
        this.transmission = transmission;
    }

    @Override
    public String toString() {
        return "Car{" +
                "model='" + model + '\'' +
                ", engine='" + engine + '\'' +
                ", transmission='" + transmission + '\'' +
                '}';
    }
}
  • 接下来是CarBuilder接口(构建器接口):
public interface CarBuilder {
    void setModel(String model);
    void setEngine(String engine);
    void setTransmission(String transmission);
    Car build();
}
  • 然后是实现CarBuilder接口的SedanCarBuilder(具体构建器类)
public class SedanCarBuilder implements CarBuilder{
    private Car car;
    
    public SedanCarBuilder(){
        this.car =  new Car();
    }
    @Override
    public void setModel(String model) {
        car.setModel(model);
    }

    @Override
    public void setEngine(String engine) {
        car.setEngine(engine);
    }

    @Override
    public void setTransmission(String transmission) {
        car.setTransmission(transmission);
    }

    @Override
    public Car build() {
        return car;
    }
}
  • 实现CarBuilder接口的SUVCarBuilder类
public class SUVCarBuilder implements CarBuilder{

    private Car car;
    public SUVCarBuilder (){
        this.car = new Car();
    }
    @Override
    public void setModel(String model) {
        car.setModel(model);
    }

    @Override
    public void setEngine(String engine) {
        car.setEngine(engine);
    }

    @Override
    public void setTransmission(String transmission) {
        car.setTransmission(transmission);
    }

    @Override
    public Car build() {
        return car;
    }
}
  • 最后是Director类(指挥者类),它使用构建器对象来构建产品
public class Director {
    private CarBuilder carBuilder;

    public Director(CarBuilder carBuilder){
        this.carBuilder = carBuilder;
    }

    public void constructSedanCar(){
        carBuilder.setModel("Sedan Model X");
        carBuilder.setEngine("2.5L Trubo");
        carBuilder.setTransmission("Semi-Automatic");
        Car car = carBuilder.build();
        car.showCarDetail();
        System.out.println(car.toString());
        System.out.println("====");
    }


    public void constructSUVCar(){
        carBuilder.setModel("SUV Model Y");
        carBuilder.setEngine("3.5L V6");
        carBuilder.setTransmission("4x4");
        Car car = carBuilder.build();
        car.showCarDetail();
        System.out.println(car.toString());
    }
}
  • 客户端代码可以这样使用建造者模式:
public class Client {
    public static void main(String[] args) {
        //构建Sedan车型
        SedanCarBuilder sedanCarBuilder = new SedanCarBuilder();
        Director director = new Director(sedanCarBuilder);
        director.constructSedanCar();

        //构建SUV车型
        SUVCarBuilder suvCarBuilder = new SUVCarBuilder();
        director = new Director(suvCarBuilder);
        director.constructSUVCar();
    }
}
posted @ 2024-04-17 00:09  文采杰出  阅读(2)  评论(0编辑  收藏  举报