java的構(gòu)造者模式(builder)

??我們?cè)诠ぷ髦袑懘a會(huì)遇到一種情況,就是設(shè)置一個(gè)對(duì)象屬性值,通常方式有兩種:

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ù)的時(shí)候,不能明確的知道往這個(gè)對(duì)象里加入了什么屬性的內(nèi)容。

第二種方式:
??雖然可以根據(jù)set函數(shù)名看到將要設(shè)置的值是什么值,但是這種寫發(fā),略顯冗余。

??在設(shè)計(jì)模式中有構(gòu)造者模式(builder),在類的構(gòu)造器或靜態(tài)工廠具有多個(gè)參數(shù)。設(shè)計(jì)這種類時(shí),builder模式就是個(gè)不錯(cuò)的選擇。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è)置屬性是多個(gè)方法連接的方式:

  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);

    }   
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容