許多人力推的一本書,真正看了有種相見恨晚的感覺。書中描述了很多平時沒有注意到的細節和實現方式
1.考慮用靜態工廠代替構造器
優勢在于:
1.它們有名稱
2.不必在每次調用它們的時候都創建一個新的對象
3.它們可以返回原返回類型的任何子類型的對象
4.在創建參數化類型的實例的時候,它們使代碼變得更加簡潔
缺點在于:
1.類如果不含公有的或者受保護的構造器,就不能被子類化
2.它們與其他的靜態方法實際沒有任何區別
慣用名稱:
valueOf
of
getInstance
newInstance
getType
newType
2.遇到多個構造器參數時要考慮構建器
package test;
public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
private final int servingSize;
private final int servings;
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
public Builder calories(int val) {
calories = val; return this;
}
public Builder fat(int val) {
fat = val; return this;
}
public Builder sodium(int val) {
sodium = val; return this;
}
public Builder carbohydrate(int val) {
carbohydrate = val; return this;
}
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder) {
servingSize = builder.servingSize;
servings = builder.servings;
fat = builder.fat;
calories = builder.calories;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
如果類的構造器或者靜態工廠具有多個參數,設計這種類,Builder模式是不錯的選擇
3.使用私有構造器或者枚舉類型強化Singleton屬性
public enum Singleton {
INSTANCE;
}
單元素的枚舉類型已經成為實現Singleton的最佳方式
4.通過私有構造器強化不可實例化的能力
java.lang.Math或者java.util.Arrays
5.避免創造不必要的對象
構造器在每次調用的時候都會創建一個新的對象,靜態工廠從來不要求這么做
6.消除過期的對象引用
1.只要類自己管理內存,就應該警惕內存泄漏問題
2.緩存
3.監聽器和其他回調