设计模式——建造者模式

一、什么是建造者模式

 Builder模式也叫建造者模式或者生成器模式, 是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来 隐藏复合对象的创建过程,它把复合对象的创建 过程加以抽象,通过子类继承和重载的方式,动 态地创建具有复合属性的对象。

二、建造者模式的结构

设计模式——建造者模式

三、建造者模式应用场景

- 对象的创建:Builder模式是为对象的创建而设计的模式

- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象

- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法

 

代码如下:

package 建造者模式;

public class House {
    String wall;
    String wallTap;
    String floor;

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getWallTap() {
        return wallTap;
    }

    public void setWallTap(String wallTap) {
        this.wallTap = wallTap;
    }

    public String getFloor() {
        return floor;
    }

    public void setFloor(String floor) {
        this.floor = floor;
    }
}

 

package 建造者模式;

public interface HoseBuild {
    void modifyWall();
    void modiFloor();
    void modifyWallTop();
    House getResult();
}
package 建造者模式;

public class HouseDirector {
    public void buildHouse(HoseBuild hoseBuild){
        hoseBuild.modiFloor();
        hoseBuild.modifyWall();
        hoseBuild.modifyWallTop();
    }
}

 

package 建造者模式;

public class pingHouseBuilder implements HoseBuild {
    House house = new House();
    @Override
    public void modifyWall() {
        house.setWall("平房-墙");
    }

    @Override
    public void modiFloor() {
        house.setFloor("平房-地板");
    }

    @Override
    public void modifyWallTop() {
        house.setWallTap("平房-墙顶");
    }

    @Override
    public House getResult() {
        return house;
    }
}
package 建造者模式;

public class villaHouse implements HoseBuild {
    House house = new House();
    @Override
    public void modifyWall() {
        house.setWall("别墅-墙");
    }

    @Override
    public void modiFloor() {
        house.setFloor("别墅-地板");
    }

    @Override
    public void modifyWallTop() {
        house.setWallTap("别墅-房顶");
    }

    @Override
    public House getResult() {
        return house;
    }
}
package 建造者模式;

public class TestDemo {
    public static void main(String[] args) {
        //调用对应工程队
        //HoseBuild hoseBuild = new pingHouseBuilder();
        HoseBuild hoseBuild = new villaHouse();

        // 设计师负责修建
        HouseDirector houseDirector = new HouseDirector();
        houseDirector.buildHouse(hoseBuild);
        // 得到最终结果
        House house = hoseBuild.getResult();
        System.out.println(house.getFloor());
        System.out.println(house.getWall());
        System.out.println(house.getWallTap());
    }
}