Java设计模式--Builder 建造者模式

建造者模式是我们平时开发中用的比较多的一种设计模式,特别是我们看源码的时候,感觉几乎是随处可见,那我们今天就以一个平日比较常见的例子来了解下建造者模式吧~

小明是一家汽车公司的生产者,有天老板跟小明说,有个客户要买车,要10000辆,每辆车要有车头,车身,车轮,小明觉得很简单,然后就开始生产:

public class Car {
    private String head;
    private String body;
    private String wheel;
    
    public Car(String head, String body, String wheel) {
        this.head = head;
        this.body = body;
        this.wheel = wheel;
    }
}

// 生产
for (int i = 1; i <= 10000; i++) {
    Car car = new Car("head", "body", "wheel");
}

过两天,老板跟小明说,又有一个客户下单,要求有车头,车身,车灯,但是不要车轮,因为之前的订单还在生产,不能直接改原来的汽车设计,所以小明决定加一个方法:

public class Car {
    private String head;
    private String body;
    private String wheel;
    private String light;

    public Car(String head, String body, String wheel) {
        this.head = head;
        this.body = body;
        this.wheel = wheel;
    }
    public Car(String head, String body, String light) {
        this.head = head;
        this.body = body;
        this.light = light;
    }
}

//生产
for (int i = 1; i <= 10000; i++) {
    Car car = new Car("head", "body", "light");
}

过两天,老板又过来跟小明说,又有一个大客户,要买好多车,但是要求出了有车头、车轮、车厢,但是不要车身,小明要听了感觉要炸了,要是天天这样改还得了,于是乎小明就开始精心设计他的车辆结构:

public class Car {
    private String head;
    private String body;
    private String wheel;
    private String light;
    private String carriage;

    private Car() {} //没有任何结构的车子是没有意义的,不允许生产,所以用private

    public static class CarBuilder {
        Car car = new Car();

        public CarBuilder buildHead(String head) {
            car.head = head;
            return this;
        }

        public CarBuilder buildBody(String body) {
            car.body = body;
            return this;
        }
        
        public CarBuilder buildWheel(String wheel) {
            car.wheel = wheel;
            return this;
        }
        
        public CarBuilder buildLight(String light) {
            car.light = light;
            return this;
        }
        
        public CarBuilder buildCarriage(String carriage) {
            car.carriage = carriage;
            return this;
        }
        
        public Car build() {
            return car;
        }
    }
}

// 生产
for (int i = 1; i <= 10000; i++) {
    Car.CarBuilder builder = new Car.CarBuilder();
    Car car = builder.buildHead("head")
            .buildWheel("wheel")
            .buildCarriage("carriage")
            .build();
}

如此一来,不管啥用户要什么样结构的车辆,小明通过简单拼装就可以生产出来。

其实我们平时生活中的建造者模式很常见,比如我们吃麦当劳,产品都是生产好的,要什么套餐就把相应的产品取出拼一起就是一份套餐了。

那么建造者模式有哪些适用场景呢?1、相同的方法,不同的执行顺序,产生不同的结果。2、多个部件或零件,都可以装配到一个对象中,但是产生的结果又不相同。3、产品类非常复杂,或者产品类中不同的调用顺序产生不同的作用。4、初始化一个对象特别复杂,参数多,而且很多参数都具有默认值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值