3年后再来聊建造者模式

2017年的时候了解了建造者模式老的文章,现在看来还是不够优雅,最近看源码又温习各种设计模式,所以重新总结一下,也给以后的自己留个记录,对比自己的成长。

建造者模式,目的就是把复杂对象的内部组装流程和组建的具体表示给解耦。就如同中国宝马汽车制造流水线,流程都一样,只是每一个流程使用的具体品牌或则规格不太一样,现在就可以制造出来3系,5系等等不同的车,哪天工厂升级了,来个7系的生产,流程差不多,主要就是升级了更好的配件。其实没必要严格的按照网上所谓的标准的类图去设计,例如我认为其中导演类我就认为没必要,可以封装在要创建的对象内部。还是以我说制造汽车的例子,过了3年我再来重写,我会这样:

class BMWCar {
    /**
     * 系列
     */
    private String series;

    /**
     * 颜色
     */
    private String color;

    /**
     * 价格
     */
    private String price;

    // setter getter

    public static BMWCar build(CarBuilder carBuilder) {
        BMWCar BMWCar = new BMWCar();
        // 这里定义组建对象的流程,至于如何创建和创建的什么东西,CarBuilder作为接口,并不关心,这里也体现了依赖抽象的思想
        // 先定义品牌,再定义颜色, 再定义成本价格
        carBuilder.buildPrice(BMWCar).buildColor(BMWCar).buildBrand(BMWCar);
        return BMWCar;
    }
}

// 定义每个汽车配件的组装
interface CarBuilder {
    CarBuilder buildBrand(BMWCar BMWCar);
    CarBuilder buildColor(BMWCar BMWCar);
    CarBuilder buildPrice(BMWCar BMWCar);
}


// 3系的builder实现
class BMW3Builder implements CarBuilder {
    @Override
    public CarBuilder buildBrand(BMWCar BMWCar) {
        BMWCar.setSeries("3系");
        return this;
    }

    @Override
    public CarBuilder buildColor(BMWCar BMWCar) {
        BMWCar.setColor("白色");
        return this;
    }

    @Override
    public CarBuilder buildPrice(BMWCar BMWCar) {
        BMWCar.setPrice("30w");
        return this;
    }
}
// 5系的builder实现
class BMW5Builder implements CarBuilder {
    @Override
    public CarBuilder buildBrand(BMWCar BMWCar) {
        BMWCar.setSeries("5系列");
        return this;
    }

    @Override
    public CarBuilder buildColor(BMWCar BMWCar) {
        BMWCar.setColor("黑色");
        return this;
    }

    @Override
    public CarBuilder buildPrice(BMWCar BMWCar) {
        BMWCar.setPrice("50w");
        return this;
    }
}

我们在使用的时候:

		System.out.println(BMWCar.build(new BMW3Builder()));
        System.out.println(BMWCar.build(new BMW5Builder()));

打印:
BMWCar{series=‘3系’, color=‘白色’, price=30w}
BMWCar{series=‘5系列’, color=‘黑色’, price=50w}
制造其他系的车,只要去实现新的Builder即可不用改原先的任何代码,这就是建造者模式的核心理念。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值