建造者模式

建造者模式的各角色定义如下:

产品:复杂的产品类,构建过程相对复杂,需要其他组件组装而成。对应下面代码中的建筑物类。

建造者:建造者接口,定义了构成产品的各个组件的构建标准,通常有多个步骤,对应下面例子中的施工方接口。

建造者实现:可以有多种实现,负责产品的组装但不包含整体建造逻辑。

指导者:持有建造者接口引用的指导者类,指导建造者按一定的逻辑进行建造。

下面用一个场景来解释建造者模式:

建筑物本身应该由多个组件组成,且各组件按一定工序建造,缺一不可。

建筑类Building

public class Building {
    //用List来模拟建筑物组件的组装
    private List<String> buildingComponents =new ArrayList<>();

    //地基
    public void setBasement(String basement){
        this.buildingComponents.add(basement);
    }

    //墙体
    public void setWall(String wall){
        this.buildingComponents.add(wall);
    }

    //屋顶
    public void setRoof(String roof){
        this.buildingComponents.add(roof);
    }

    //后组装的组件先展示
    @Override
    public String toString() {
        String buildingStr="";
        for(int i=buildingComponents.size()-1;i>=0;i--){
            buildingStr+=buildingComponents.get(i);
        }
        return buildingStr;
    }
}

施工方接口,具备三大件的建造能力

public interface Builder {
    //建造地基
    public void buildBasement();
    //建造墙体
    public void buildWall();
    //建造屋顶
    public void buildRoof();
    //获取建筑物
    public Building getBuilding();
}

别墅施工方

public class HouseBuilder implements Builder{

    private Building house;

    public HouseBuilder(){
        house=new Building();
    }
    @Override
    public void buildBasement() {
        System.out.println("挖土方,部署管道,线缆,水泥加固,搭建围墙,花园");
        house.setBasement("++++++++++\n");
    }

    @Override
    public void buildWall() {
        System.out.println("搭建木制框架,石膏板封墙并粉饰内外");
        house.setWall("| 田  |  田  田  |\n");
    }

    @Override
    public void buildRoof() {
        System.out.println("建造木制屋顶,阁楼,安装烟囱,做好防");
        house.setRoof("/🎈\n");

    }

    @Override
    public Building getBuilding() {
        return house;
    }
}

工程总监去把控整个施工流程,无需关心是哪个施工方,也不关心施工方具体的建造细节。

public class Director {

    private Builder builder;

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

    //注入施工方
    public void setBuilder(Builder builder){
        this.builder=builder;
    }

    public Building direct(){
        System.out.println("====工程项目启动=====");
        //打好地基
        builder.buildBasement();
        //建造框架,墙体
        builder.buildWall();
        //封顶
        builder.buildRoof();
        System.out.println("====工程项目竣工====");
        return builder.getBuilding();
    }
}

开发商客户端类

public class Client {
    public static void main(String[] args) {
        //组件别墅施工队
        Director director=new Director(new HouseBuilder());
        System.out.println(director.direct());
    }
}

我们的房子建好了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值