设计模式-建造者模式(一)

2023-05-03 15:05:01 浏览数 (1)

建造者模式(Builder Pattern)是一种创建型设计模式,它可以将对象的构建过程分离出来,使得同样的构建过程可以创建不同的表示。在该模式中,一个类负责对象的创建,并将对象的创建过程分解为多个步骤,每个步骤都由一个独立的建造者类来实现。最终通过指导这些步骤来组装出一个完整的对象。

在实际开发中,建造者模式常被用于构建复杂的对象,这些对象可能有多个属性需要初始化,而且这些属性之间可能有复杂的依赖关系。使用建造者模式可以避免在代码中直接实例化对象时需要传入大量的参数,并可以保证对象构建的一致性。

下面我们通过一个简单的例子来说明建造者模式的使用。

假设我们需要构建一个汽车对象,这个汽车对象包含以下属性:车牌号、车型、颜色、引擎、轮胎、座椅等。我们可以按照以下步骤来构建汽车对象:

创建汽车对象的抽象类Car,定义Car对象的基本属性和方法,如下所示:

代码语言:javascript复制
javaCopy codepublic abstract class Car {
    protected String licensePlateNumber;
    protected String model;
    protected String color;
    protected String engine;
    protected String tires;
    protected String seats;

    public abstract void setLicensePlateNumber(String licensePlateNumber);
    public abstract void setModel(String model);
    public abstract void setColor(String color);
    public abstract void setEngine(String engine);
    public abstract void setTires(String tires);
    public abstract void setSeats(String seats);
    public abstract String getDescription();
}

创建汽车对象的具体实现类,如SedanCar、SUVCar、SportsCar等,实现Car对象的抽象方法,如下所示:

代码语言:javascript复制
public class SedanCar extends Car {
    public SedanCar() {
        this.licensePlateNumber = "";
        this.model = "";
        this.color = "";
        this.engine = "";
        this.tires = "";
        this.seats = "";
    }

    public void setLicensePlateNumber(String licensePlateNumber) {
        this.licensePlateNumber = licensePlateNumber;
    }

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

    public void setColor(String color) {
        this.color = color;
    }

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

    public void setTires(String tires) {
        this.tires = tires;
    }

    public void setSeats(String seats) {
        this.seats = seats;
    }

    public String getDescription() {
        return "This is a sedan car with license plate number "   licensePlateNumber   ", model "   model   ", color "   color   ", engine "   engine   ", tires "   tires   ", seats "   seats   ".";
    }
}

代码语言:javascript复制
public class SUVCar extends Car {
    public SUVCar() {
        this.licensePlateNumber = "";
        this.model = "";
        this.color = "";
        this.engine = "";
        this.tires = "";
        this.seats = "";
    }

    public void setLicensePlateNumber(String licensePlateNumber) {
        this.licensePlateNumber = licensePlateNumber;
    }

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

    public void setColor(String color) {
        this.color = color;
    }

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

    public void setTires(String tires) {
        this.tires = tires;
    }

    public void setSeats(String seats) {
        this.seats = seats;
    }

    public String getDescription() {
        return "This is an SUV car with license plate number "   licensePlateNumber   ", model "   model   ", color "   color   ", engine "   engine   ", tires "   tires   ", seats "   seats   ".";
    }
}

0 人点赞