建造者模式

建造者模式中的4个角色:

  1. Product(产品类):要创建的对象。
  2. builder(抽象建造者):定义对象的创建过程方法。
  3. ConcreteBuilder(具体建造者):实现具体的方法,不同的创建者方法内部的代码不一样, 从而可以创建不同的对象。
  4. Director(指导者):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

简单说: 具体产品定义好产品由那些部分组成,抽象建造者定义产品组成部分的实现方法, 具体建造者实现这些方法,最后返回建造好的对象(也是一个方法, 需要被调用),指导者负责调用建造者的方法,完成建造以后返回建造好的实例。

指导者遵循依赖倒置原则,保证可扩展性。

具体案例如下: 我们模拟修建房子

//具体产品
class House{
    //房子的组成 地基 墙 屋顶
    private String foundation;//地基
    private String wall;//墙
    private String roof;//屋顶

    public void setFoundation(String foundation) {
        this.foundation = foundation;
        System.out.println(foundation + "修建完成");
    }

    public void setWall(String wall) {
        this.wall = wall;
        System.out.println(wall + "修建完成");
    }


    public void setRoof(String roof) {
        this.roof = roof;
        System.out.println(roof + "修建完成");
    }
}
//抽象建造者
interface IBuilder{
    public void buildFoundation();
    public void buildWall();
    public void buildRoof();
    public House getHouse();
}
//具体建造者  普通房子
class CommonHouseBuilder implements IBuilder{

    private House house;

    public CommonHouseBuilder() {
        this.house = new House();
    }

    @Override
    public void buildFoundation() {
        house.setFoundation("普通房子的地基");
    }

    @Override
    public void buildWall() {
        house.setWall("普通房子的墙");
    }

    @Override
    public void buildRoof() {
        house.setRoof("普通房子的屋顶");
    }

    @Override
    public House getHouse() {
        System.out.println("修建完成, 交房成功!");
        return this.house;
    }
}
//指导者
class HouseDirector{
    public House build(IBuilder builder){
        builder.buildFoundation();
        builder.buildWall();
        builder.buildRoof();
        return builder.getHouse();
    }
}

主方法

public static void main(String[] args) throws CloneNotSupportedException {
        HouseDirector houseDirector = new HouseDirector();
        House build = houseDirector.build(new CommonHouseBuilder());
    }

可扩展性: 我们如果想修一座别墅, 就定义一个别墅的具体建造者,然后在主方法中传给指导者即可, 保证了开闭原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值