builder 模式的代码 手写的话不是不可能,字段多了 就恶心了,下面就会看到,长话短说,IEDA 安装 builder 插件 首先Idea 快捷键Ctrl +alt+s 打开preference 找Plugins
弹出来一个窗口 搜索InnerBuilder 点击右边的 install 就完了,等待下载完成,重启idea。进入我们写好的类,点击鼠标右键,选择Generate 下面有一个builder,选择想要的属性。体验优雅的代码
然后说一下Java中设计模式 ,提到设计模式,懂得人说:“代码变得更优雅,更好看”,不懂得人看了一脸懵逼,那就说一下builder模式吧,对于一些拥有特变多的类来说特别方便,为了使这个类,我们通常情况下会给这个类多个构造器以及一个默认的无参数构造器。
很多编译器有generate快捷键,可以快速生成一个含有该类属性的constructor, 但是当参数的个数比较多的时候,经常会传错。当然有人会说每个属性调用set方法不就完了么,那么你代码会变成一坨,不如点出来代码优雅,看下面的例子,build的优点儿就体现出来了。
pojo Test
public class Test { private String a; private String b; private String c; private String d; private String e; private String f; public Test(){ } private Test(Builder builder) { a = builder.a; b = builder.b; c = builder.c; d = builder.d; e = builder.e; f = builder.f; } public static Builder newBuilder() { return new Builder(); } public static Builder newBuilder(Test copy) { Builder builder = new Builder(); builder.a = copy.a; builder.b = copy.b; builder.c = copy.c; builder.d = copy.d; builder.e = copy.e; builder.f = copy.f; return builder; } public static final class Builder { private String a; private String b; private String c; private String d; private String e; private String f; private Builder() { } public Builder a(String val) { a = val; return this; } public Builder b(String val) { b = val; return this; } public Builder c(String val) { c = val; return this; } public Builder d(String val) { d = val; return this; } public Builder e(String val) { e = val; return this; } public Builder f(String val) { f = val; return this; } public Test build() { return new Test(this); } } public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } public String getD() { return d; } public void setD(String d) { this.d = d; } public String getE() { return e; } public void setE(String e) { this.e = e; } public String getF() { return f; } public void setF(String f) { this.f = f; } }
测试 TestBuilder
public class TestBuilder { public static void main(String[] args) { //非builder模式 Test test =new Test(); test.setA("1"); test.setB("2"); test.setC("3"); test.setD("4"); test.setE("5"); test.setF("6"); //builder模式 Test test1=Test.newBuilder().b("1").a("2").c("3").d("4").e("5").f("6").build(); } }
看起来build模式 是不是很优雅。