设计模式-建造者模式

211 阅读2分钟

建造者模式

引言

前两天家里的新房要买一些家电了,老爸叫我去买空调和冰箱。

正文

建造者模式就是将一个复杂的对象的构建和表现相分离,即该对象的构建过程中有不同的表现。

核心思想

建造者模式其实是创建出一个复杂的对象,该对象由多个复杂的产品组成,对象的表现是一样的,但采用的产品可能是不一样的。

代码实现

//产品
public class House {
    private String mFridge;
    private String mAirCondition;

    public void setFridge(String fridge) {
        mFridge = fridge;
    }

    public void setAirCondition(String airCondition) {
        mAirCondition = airCondition;
    }

    //这里展示房子的特性
    public void show() {
        System.out.println("家里新买了" + mFridge + "和" + mAirCondition);
    }

}
//抽象建造者
abstract class Builder {
    protected House house = new House();

    public abstract void buildFridge();

    public abstract void buildAirCondition();

    public House getHouse() {
        return house;
    }
}
//具体建造者
public class HouseBuilder extends Builder {
    @Override
    public void buildFridge() {
        house.setFridge("西门子冰箱");
    }

    @Override
    public void buildAirCondition() {
        house.setAirCondition("三菱空调");
    }
}
//指挥者
public class HouseDirector {
    private Builder builder ;

    public HouseDirector(Builder builder) {
        this.builder = builder;
    }

    public House construct() {
        builder.buildFridge();
        builder.buildAirCondition();
        return builder.getHouse();
    }

}
//调用
public class Main {
    public static void main(String[] args) {
        Builder builder = new HouseBuilder();
        HouseDirector houseDirector = new HouseDirector(builder);
        House house = houseDirector.construct();
        house.show();
    }
}

输出结果

家里新买了西门子冰箱和三菱空调

解释

在本文中,由于新房需要家电,此时新房充当了产品这一角色。老爸叫我去买冰箱和空调,此时老爸是指挥者,我则是具体建造者。

总结

建造者模式看似和工厂模式有点类似,但建造者模式更注重其产品部件的组装过程,工厂模式更注重创建过程。

建造者模式的对象相对复杂,其由多个部分构成,各个部分又会经常发生变化,但总的构建是相对稳定的。

建造者模式的构建和表现过程是独立的。

标准的建造者模式包含产品、抽象建造者、具体建造者以及指挥者。但如果只有一种产品时只需要一个建造者,此时可以略去抽象建造者。更甚指挥者有时也可以略去。