??我們在工作中寫代碼會遇到一種情況,就是設(shè)置一個對象屬性值晒屎,通常方式有兩種:
1. Animal animal=new Animal("3歲",20kg,"牛奶");
2. Animal animal=new Animal();
animal.setAge("3歲");
animal.setWeight("20kg");
animal.setFood("牛奶");
第一種方式:
??相當(dāng)于在構(gòu)造函數(shù)里傳遞參數(shù)喘蟆,但這樣加入?yún)?shù)的時候,不能明確的知道往這個對象里加入了什么屬性的內(nèi)容鼓鲁。
第二種方式:
??雖然可以根據(jù)set函數(shù)名看到將要設(shè)置的值是什么值蕴轨,但是這種寫發(fā),略顯冗余骇吭。
??在設(shè)計模式中有構(gòu)造者模式(builder),在類的構(gòu)造器或靜態(tài)工廠具有多個參數(shù)橙弱。設(shè)計這種類時,builder模式就是個不錯的選擇燥狰。Demo代碼如下:
public class Purchase {
private final String shipNo;
private final String menuId;
private final String menuName;
private final Double price;
public static class Builder {
private final String shipNo;
private String menuId;
private String menuName;
private final Double price = 0.0;
public Builder(String shipNo) {
this.shipNo = shipNo;
}
public Builder menuId(String val) {
menuId = val;
return this;
}
public Builder menuName(String val){
menuName=val;
return this;
}
public Purchase build() {
return new Purchase(this);
}
}
private Purchase(Builder builder) {
shipNo = builder.shipNo;
menuId = builder.menuId;
menuName = builder.menuName;
price = builder.price;
}
}
其結(jié)果就是這種設(shè)置屬性是多個方法連接的方式:
public static void main(String[] args) {
Purchase p=new Builder("S0001").menuId("11").menuName("宮保").build();
System.out.println(p.menuName);
}
也有另一種方式棘脐,省去代碼的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);
}
}