构建者设计模式

什么是构建者设计模式

对象如何创建?方式有很多,比如以下方式

//无参构造,属性赋值
Member member = new Member();
member.setPhone("13312341234");
member.setName("花开小世界");
member.setGender(1);

//有参构造
Member member1 = new Member("13312341234","花开小世界",1);

对比以上方式,也可以选择更加优雅的方式书写,比如以下代码,也是创建对象,并且赋值

Member member = Member.builder()
        .phone("13312341234")
        .name("花开小世界")
        .gender(1)
        .build();

在很多框架中也能看到这样写的身影。这种编写的方式就是构建者设计模式,好处是易于扩展,方便类的使用

详细的代码构成

当我们在一个实体类中添加了@Builder注解后,这个类就支持了构建者模式来使用这个类,我们可以查看生成后的class文件,以下代码是生成后的核心代码

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.zzyl.entity;

import com.zzyl.base.BaseEntity;

public class Member extends BaseEntity {
    private String phone;
    private String name;
    private String avatar;
    private String openId;
    private int gender;
    
    //省略了get 和  set方法

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

    public Member(final String phone, final String name, final String avatar, final String openId, final int gender) {
        this.phone = phone;
        this.name = name;
        this.avatar = avatar;
        this.openId = openId;
        this.gender = gender;
    }

    public Member() {
    }

    public static class MemberBuilder {
        private String phone;
        private String name;
        private String avatar;
        private String openId;
        private int gender;

        MemberBuilder() {
        }

        public MemberBuilder phone(final String phone) {
            this.phone = phone;
            return this;
        }

        public MemberBuilder name(final String name) {
            this.name = name;
            return this;
        }

        public MemberBuilder avatar(final String avatar) {
            this.avatar = avatar;
            return this;
        }

        public MemberBuilder openId(final String openId) {
            this.openId = openId;
            return this;
        }

        public MemberBuilder gender(final int gender) {
            this.gender = gender;
            return this;
        }

        public Member build() {
            return new Member(this.phone, this.name, this.avatar, this.openId, this.gender);
        }

        public String toString() {
            return "Member.MemberBuilder(phone=" + this.phone + ", name=" + this.name + ", avatar=" + this.avatar + ", openId=" + this.openId + ", gender=" + this.gender + ")";
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值