遇到多個構造器引數時要考慮用構建器

2021-07-28 12:54:20 字數 807 閱讀 2278

重疊構造器模式可行,但是當有許多引數的時候,客戶端**會很難編寫

builder模式:

不直接生成想要的物件,而是讓客戶端利用所有必要的引數呼叫構造器,得到乙個builder物件。

public

class

nutritionfacts

public builder calories(int val)

public builder fat(int val)

public builder sodium(int val)

public builder carbohydrate(int val)

public nutritionfacts build()

}private

nutritionfacts(builder builder)

}

注意nutritionfacts是不可變的,所有的預設引數值都單獨放在乙個地方。builder的setter方法返回builder本身,以便可以把呼叫鏈結起來。

下面就是客戶端**:

nutritionfacts nutritionfacts = new  nutritionfacts.builder(1, 1).calories(1).sodium(20).build();
與構造器相比,builder的微略的優勢在於,builder可以有多個可變的引數。構造器就像方法一樣,,只能有乙個可變引數,因為builder利用單獨的方法來設定每個引數,你想要多少個可變引數,他們就可以有多少個,直到每個setter方法都有乙個可變引數。

第二條 遇到多個構造器引數時要考慮用構建器

構造方法中傳遞的引數一般是必要引數,如果乙個類,有必要的屬性,還有可選的屬性,那可用builder構造器 建立對應的類 例 類nutrition 有必要屬性servings,servings,可選屬性為calories,fat,sodium,carbohydrate public class nut...

構造方法引數可選時,用構建器(builder)

構造器引數有多個時要使用構建器builder 引數有多個,weight,height,log,nice多個引數,其中weight和height引數是必須的,而log和nice引數是隨機選擇的,可以有其中乙個,也可以兩個都需要。這是我們為了避免使用beans方法時由於執行緒不同步的因素,我們使用構建器...

1 考慮用靜態工廠方法代替構造器

1.考慮用靜態工廠方法代替構造器 例子 public static boolean valueof boolean b 使用靜態工廠替代構造器的優勢 1 他們有名稱 2 不必每次呼叫都產生新的物件 3 可以返回原返回型別任何子型別的物件 4 建立引數化型別例項的時候,使 更簡潔 缺點 1 類如果不含...