建造者模式

建造者模式

为什么要使用建造模式
当一个类特别复杂,需要很多种构造函数进行构造,而且一旦构造成功后,值不允许变更
比如需要构建一个汽车,我有个汽车的工厂,我这个汽车工厂可以生产跑车 suv 小轿车,甚至还可以生产三轮车,还需要根据不同的颜色进行生产,但是一旦生产完成,我的值不允许被变动,而且比如生产三轮车,那传入的轮子的个数是3,需要根据3来判断是否是三轮车,需要根据参数是顺序来判断具体生产什么样的车出来。 比如 类型–轮子–颜色–混动–name
当我类型是三轮车的时候我的轮子的个数传入只能是3 当我的颜色是红色的时候我就不能生产混动的车型等等
如果我用普通的构造函数,可能需要写上十种构造函数进行

但是我用建造者模式,我只用传入想要的属性我就可以直接生产对应的汽车出来

优点:适合构建复杂对象,并且通过链式编程能更直观的展示,代码维护起来更加方便

缺点:不适合简单对象,会增加系统的复杂度

package com.example.demo.study.builder;

/**
 * @Author zhanpeng
 * @Date 2023/5/22 18:31
 */

public class Car {

    private final String name;

    private final String type;

    private final String color;

    private final Integer tire;

    private final Boolean hybrid;

    private Car(CarBuilder carBuilder) {
        this.name = carBuilder.name;
        this.type = carBuilder.type;
        this.color = carBuilder.color;
        this.tire = carBuilder.tire;
        this.hybrid = carBuilder.hybrid;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", color='" + color + '\'' +
                ", tire=" + tire +
                ", hybrid=" + hybrid +
                '}';
    }

    public static class CarBuilder {

        private String name;

        private String type;

        private String color;

        private Integer tire;

        private Boolean hybrid;

        public CarBuilder buildName(String name) {
            this.name = name;
            return this;
        }

        public CarBuilder buildType(String type) {
            this.type = type;
            return this;
        }

        public CarBuilder buildColor(String color) {
            this.color = color;
            return this;
        }

        public CarBuilder buildTire(Integer tire) {
            this.tire = tire;
            return this;
        }

        public CarBuilder buildHybrid(Boolean hybrid) {
            this.hybrid = hybrid;
            return this;
        }

        public Car build() {
            return new Car(this);
        }

    }


}

测试类

public static void main(String [] args){
        Car build = new Car.CarBuilder()
                .buildType("跑车")
                .buildTire(4)
                .buildColor("红色")
                .buildHybrid(false)
                .buildName("兰博基尼")
                .build();
        System.out.println("build = " + build);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值