建造者模式

特点

建造者模式也叫创建者模式,属于创建型设计模式。旨在更为灵活的创建对象。该模式有一个Builder类,主要提供对象的构建过程。与工厂模式最大的区别在于工厂模式是封装了对象的创建过程,提供最终的对象,而建造者模式则更为灵活的将建造过程提供给使用者,让其自由设定对象创建过程和属性。

代码

public class Phone {
    private String cpu;
    private String battery;
    private String model;
    private String mem;
    private String disk;
    private String screen;

    public Phone(Builder builder) {
        this.cpu = builder.cpu;
        this.battery = builder.battery;
        this.model = builder.model;
        this.mem = builder.mem;
        this.disk = builder.disk;
        this.screen = builder.screen;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", battery='" + battery + '\'' +
                ", model='" + model + '\'' +
                ", mem='" + mem + '\'' +
                ", disk='" + disk + '\'' +
                ", screen='" + screen + '\'' +
                '}';
    }

    public static Builder builder(){
        return new Builder();
    }

    public static class Builder{
        private String cpu;
        private String battery;
        private String model;
        private String mem;
        private String disk;
        private String screen;

        public Builder cpu(String cpu){
            this.cpu = cpu;
            return this;
        }

        public Builder battery(String battery){
            this.battery = battery;
            return this;
        }

        public Builder model(String model){
            this.model = model;
            return this;
        }

        public Builder mem(String mem){
            this.mem = mem;
            return this;
        }

        public Builder disk(String disk){
            this.disk = disk;
            return this;
        }

        public Builder screen(String screen){
            this.screen = screen;
            return this;
        }

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

测试 :

@Test
public void testBuilder(){
    Phone phone = Phone.builder()
            .cpu("骁龙")
            .battery("4000mA")
            .disk("120GB")
            .mem("16GB")
            .model("pro")
            .screen("5点触控")
            .build();
    log.info("创建的对象: {}",phone);
}

日志显示:

2021-03-10 10:04:11.622  INFO 76400 --- [           main] org.example.singleton.BuilderTest        : 创建的对象: Phone{cpu='骁龙', battery='4000mA', model='pro', mem='16GB', disk='120GB', screen='5点触控'}

在java项目中,通常会使用插件来标记,例如:lombok插件中的@Builder注解:

@Builder
public class Phone {
    private String cpu;
    private String battery;
    private String model;
    private String mem;
    private String disk;
    private String screen;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值