我们在工作中写代码会遇到一种情况,就是设置一个对象属性值,通常方式有两种:
1. Animal animal=new Animal("3岁",20kg,"牛奶"); 2. Animal animal=new Animal(); animal.setAge("3岁"); animal.setWeight("20kg"); animal.setFood("牛奶");
第一种方式:
相当于在构造函数里传递参数,但这样加入参数的时候,不能明确的知道往这个对象里加入了什么属性的内容。
第二种方式:
虽然可以根据set函数名看到将要设置的值是什么值,但是这种写发,略显冗余。
在设计模式中有构造者模式(builder),在类的构造器或静态工厂具有多个参数。设计这种类时,builder模式就是个不错的选择。Demo代码如下:
1 public class Purchase { 2 private final String shipNo; 3 private final String menuId; 4 private final String menuName; 5 private final Double price; 6 7 public static class Builder { 8 private final String shipNo; 9 private String menuId; 10 private String menuName; 11 private final Double price = 0.0; 12 13 public Builder(String shipNo) { 14 this.shipNo = shipNo; 15 } 16 17 public Builder menuId(String val) { 18 menuId = val; 19 return this; 20 } 21 22 public Builder menuName(String val){ 23 menuName=val; 24 return this; 25 } 26 27 public Purchase build() { 28 return new Purchase(this); 29 } 30 } 31 32 private Purchase(Builder builder) { 33 shipNo = builder.shipNo; 34 menuId = builder.menuId; 35 menuName = builder.menuName; 36 price = builder.price; 37 } 38 }
其结果就是这种设置属性是多个方法连接的方式:
1 public static void main(String[] args) { 2 Purchase p=new Builder("S0001").menuId("11").menuName("宫保").build(); 3 System.out.println(p.menuName); 4}
也有另一种方式,省去代码的builder写法,就是使用lombok:
import lombok.Builder; import lombok.Data; @Builder @Data public class LomBokDemo { private String name; private Integer age; public static void main(String[] args) { LomBokDemo wyz = LomBokDemo.builder().age(12).name("张三").build(); System.out.println(wyz); } }