设计模式-构建者模式

产品:

// 产品 --> product
@Data
public class House {
    private String baise;
    private String wall;
    private String roofed;

    public String getBaise() {
        return baise;
    }

    public void setBaise(String baise) {
        this.baise = baise;
    }

    public String getWall() {
        return wall;
    }

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

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }

    @Override
    public String toString() {
        return "House{" +
                "baise='" + baise + '\'' +
                ", wall='" + wall + '\'' +
                ", roofed='" + roofed + '\'' +
                '}';
    }

普通房子:

public class CommonHouse extends HouseBuilder {

    @Override
    public House buildBasic(House house) {
        System.out.println("普通房子打地基5米...");
        house.setBaise("Basic赋值");
        return house;
    }

    @Override
    public House buildwWalls(House house) {
        System.out.println("普通房子砌墙10米...");
        house.setWall("wall赋值");
        return house;
    }

    @Override
    public House roofed(House house) {
        System.out.println("普通房子封顶...");
        house.setRoofed("roofed赋值");
        return house;
    }
}

别墅房子:

public class HighBuilding extends HouseBuilder {

    @Override
    public House buildBasic(House house) {
        System.out.println("高楼打地基100米...");
        return house;
    }

    @Override
    public House buildwWalls(House house) {
        System.out.println("高楼砌墙20米...");
        return house;
    }

    @Override
    public House roofed(House house) {
        System.out.println("高楼透明屋顶...");
        return house;
    }
}

        

抽象的建造者:
// 抽象的建造者
public abstract class HouseBuilder {

    // 将建造的流程写好
    public abstract House buildBasic(House house);
    public abstract House buildwWalls(House house);
    public abstract House roofed(House house);

    // 建造好房子, 将产品(房子)返回
    public House buildHouse(House house) {
        return house;
    }
}
指挥者这里去指定制作流程,返回具体的产品
@Data
public class HouseDirector {
    HouseBuilder houseBuilder = null;
    // 通过构造器传入houseBuilder

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    // 如何处理建造房子的流程,交给子规则
    public House constructHouse(House house) {
        houseBuilder.buildBasic(house);
        houseBuilder.buildwWalls(house);
        houseBuilder.roofed(house);
        // TODO 根据实际情况,可以在这拓展新业务

        return houseBuilder.buildHouse(house);
    }

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

}

客户端

public class Client {
    public static void main(String[] args) {
        // 盖普通的房子
        CommonHouse commonHouse = new CommonHouse();
        HouseDirector houseDirector = new HouseDirector(commonHouse);

        House house = houseDirector.constructHouse(new House());
        System.out.println(house);

    }
}

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值