设计模式之建造者模式

建造者模式,是将多个简单的对象通过一定的逻辑或者顺序构建成一个复杂的对象。

优点:符合开闭原则,易于扩展。代码解耦,易于维护。

适用场景:几个简单对象有较大变化,但是构建复杂对象的过程相同的场景。

代码示例


首先来定义一个汽车模型(复杂对象),有轮子,发动机,方向盘(简单对象):

public class Car {
    //车轮
    private String wheel;
    //发动机
    private String engine;
    //方向盘
    private String steeringWheel;

    public String getWheel() {
        return wheel;
    }

    public void setWheel(String wheel) {
        this.wheel = wheel;
    }

    public String getEngine() {
        return engine;
    }

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

    public String getSteeringWheel() {
        return steeringWheel;
    }

    public void setSteeringWheel(String steeringWheel) {
        this.steeringWheel = steeringWheel;
    }
}

再来一个造汽车的标准:

public abstract class ABuildCar{
    protected Car car=new Car();
    public abstract void buildWheel();
    public abstract void buildEngine();
    public abstract void buildSteeringWheel();
    public Car createCar(){
        return car;
    }
}

造一辆宝马和奔驰:

public class BaoMao extends ABuildCar{

    @Override
    public void buildWheel() {
        car.setWheel("制造宝马车轮");
    }

    @Override
    public void buildEngine() {
        car.setEngine("制造宝马发动机");
    }

    @Override
    public void buildSteeringWheel() {
        car.setSteeringWheel("制造宝马方向盘");
    }
}
public class BenChi extends ABuildCar{

    @Override
    public void buildWheel() {
        car.setWheel("制造奔驰车轮");
    }

    @Override
    public void buildEngine() {
        car.setEngine("制造奔驰发动机");
    }

    @Override
    public void buildSteeringWheel() {
        car.setSteeringWheel("制造奔驰方向盘");
    }
}

最后定义指挥者,让指挥者规定制造流程:

public class Director{
    private ABuildCar aBuildCar;
    public Director(ABuildCar aBuildCar){
        this.aBuildCar=aBuildCar;
    }

    public void setaBuildCar(ABuildCar aBuildCar) {
        this.aBuildCar = aBuildCar;
    }
    public Car createCar(){
        aBuildCar.buildWheel();
        aBuildCar.buildEngine();
        aBuildCar.buildSteeringWheel();
        return aBuildCar.createCar();
    }
}

测试:

public class Main {
    public static void main(String[] args) {
        Director director=new Director(new BaoMao());
        Car baoma=director.createCar();
        System.out.println(baoma.getWheel());
        System.out.println(baoma.getEngine());
        System.out.println(baoma.getSteeringWheel());
        director.setaBuildCar(new BenChi());
        Car benchi=director.createCar();
        System.out.println(benchi.getWheel());
        System.out.println(benchi.getEngine());
        System.out.println(benchi.getSteeringWheel());
    }
}

posted @ 2020-06-06 22:05  网络小渣渣  阅读(67)  评论(0)    收藏  举报