java-设计模式-建造者模式

  • 链式调用(手动实现方式)
  1. 直接上代码
//
public class Condition {

    private String str1;
    private String str2;
    private String str3;
    private String str4;
    private String str5;
    private String str6;
    private String str7;
    private String str8;
    private String str9;
    private String str10;

    // 私有构造器,限制了在外部直接创建实例
    private Condition(Builder Builder) {
        this.str1 = Builder.str1;
        this.str2 = Builder.str2;
        this.str3 = Builder.str3;
        this.str4 = Builder.str4;
        this.str5 = Builder.str5;
        this.str6 = Builder.str6;
        this.str7 = Builder.str7;
        this.str8 = Builder.str8;
        this.str9 = Builder.str9;
        this.str10 = Builder.str10;
    }

    // 静态内部类
    public static class Builder{
        private String str1;
        private String str2;
        private String str3;
        private String str4;
        private String str5;
        private String str6;
        private String str7;
        private String str8;
        private String str9;
        private String str10;

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

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

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

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

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

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

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

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

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

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

        // 通过静态类创建外部类实例
        public Condition build(){
            return new Condition(this);
        }
    }

    // 为外部类提供getter方法
     ...

    // 为外部类提供setter方法
     ...

}
public static void main(String[] args) {
    // 创建对象
    Condition condition = new Condition.Builder()
            .setStr1("aa")
            .setStr2("bb")
            .setStr3("cc")
            .build();
}
  • 链式调用(借助 lombok 插件实现)
  1. 上代码,不解释
@Setter
@Getter
@Builder
public class Demo {

    private String name;
    private Integer age;
    private String address;

}
public static void main(String[] args) {

	// 创建对象
	Demo demo = Demo.builder()
			.name("小明")
			.age(28)
			.address("徐州")
			.build();

}

 注:TMD,真的是不要太简单;不过从调用方式看似乎和我们手动写的有点差别,我们看看它编译后的文件:

public class Demo {
    private String name;
    private Integer age;
    private String address;

    Demo(String name, Integer age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public static Demo.DemoBuilder builder() {
        return new Demo.DemoBuilder();
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getName() {
        return this.name;
    }

    public Integer getAge() {
        return this.age;
    }

    public String getAddress() {
        return this.address;
    }

    public static class DemoBuilder {
        private String name;
        private Integer age;
        private String address;

        DemoBuilder() {
        }

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

        public Demo.DemoBuilder age(Integer age) {
            this.age = age;
            return this;
        }

        public Demo.DemoBuilder address(String address) {
            this.address = address;
            return this;
        }

        public Demo build() {
            return new Demo(this.name, this.age, this.address);
        }

        public String toString() {
            return "Demo.DemoBuilder(name=" + this.name + ", age=" + this.age + ", address=" + this.address + ")";
        }
    }
}

可以看出,它的实现方式稍微不一样,我们手动写的方式是直接通过 new获取静态内部类对象;而使用lombok,它是把这个过程封装在了一个静态方法中,直接调用静态方法就可以了

  • 推荐:
  1. IntelliJ IDEA 2017 中集成 lombok      https://blog.csdn.net/m0_37524661/article/details/81670131
  2. lombok下载                                         https://download.csdn.net/download/m0_37524661/10605567

猜你喜欢

转载自blog.csdn.net/m0_37524661/article/details/87876092