Java中的Builder模式

日常开发中经常用到建造者设计模式,记录一下简单的构造形式
package com.google.builder;

/**
 * @author : ♞Demons♛
 * @date : 2020-01-04 17:21
 * Description :
 **/
public class FamilyBuilder {

    private final String mother;
    private final String father;
    private final String sister;
    private final String me;

    public FamilyBuilder(String mother, String father, String sister, String me) {
        this.mother = mother;
        this.father = father;
        this.sister = sister;
        this.me = me;
    }

    public String getMother() {
        return mother;
    }

    public String getFather() {
        return father;
    }

    public String getSister() {
        return sister;
    }

    public String getMe() {
        return me;
    }

    public static class Builder {
        private String mother;
        private String father;
        private String sister;
        private String me;

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

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

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

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

        public FamilyBuilder build() {
            return new FamilyBuilder(mother, father, sister, me);
        }
    }
}

使用方式如下:

package com.google.builder;

/**
 * @author : ♞Demons♛
 * @date : 2020-01-04 17:00
 * Description :
 **/
public class Main {
    public static void main(String[] args) {
        FamilyBuilder familyBuilder = new FamilyBuilder.Builder()
                .mother("m")
                .father("f")
                .sister("s")
                .me("l")
                .build();
        System.out.println(familyBuilder.getMother());
        System.out.println(familyBuilder.getFather());
        System.out.println(familyBuilder.getSister());
        System.out.println(familyBuilder.getMe());
    }
}

注:为了显示效果,我在builder类中多加了getter方法,便于外部访问构造好的几个内部参数
在使用了IDEA的插件InnerBuilder后发现了创建的另一种形式,构造时可选项如下:
可选项
自动生成的代码如下:

package com.google.builder;

/**
 * @author : ♞Demons♛
 * @date : 2020-01-04 17:33
 * Description :
 **/
public class AtomicBuilder {
    private final String name;
    private final String look;
    private final int age;

    private AtomicBuilder(Builder builder) {
        name = builder.name;
        look = builder.look;
        age = builder.age;
    }

    public static final class Builder {
        private String name;
        private String look;
        private int age;

        public Builder() {
        }

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

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

        public Builder age(int age) {
            this.age = age;
            return this;
        }

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

对比后发现,主要区别是插件生成的代码中build()方法中在创建AtomicBuilder实例时采用的构造参数是对象,而我最上面的构造参数是具体的参数,相比之下插件生成的要简单一些,可以精简代码,NICE!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值