Effective Java讀書筆記1-考慮使用靜態工廠代替構造器
阿新 • • 發佈:2019-01-27
靜態工廠方法(Static factory method)的優點:
1.靜態工廠方法有名稱
在需要多個建構函式且建構函式的引數型別完全一樣時,可以使用靜態工廠方法。而且可以選擇靜態工廠的名稱以突出他們之間的區別
2.不必在每次呼叫他們的時候建立一個新的類
這使得使用靜態工廠時,不會存在兩個相等的例項,及當且僅當a==b是a.equals(b)為true
3.可以返回原返回型別的任意子型別
1 public interface RandomGenerator<T> { 2 T next(); 3 }
RandomIntGenerator 的第一個實現類如下:String型別的生成器如:01 class RandomIntGenerator implements RandomGenerator<Integer> { 02 private final int min; 03 private final int max; 04 05 RandomIntGenerator(int min, int max) { 06 this.min = min; 07 this.max = max; 08 } 09 10 public Integer next() {...} 11 }
1 class RandomStringGenerator implements RandomGenerator<String> { 2 private final String prefix; 3 4 RandomStringGenerator(String prefix) { 5 this.prefix = prefix; 6 } 7 8 public String next() {...} 9 }
01 public final class RandomGenerators { 02 // Suppresses default constructor, ensuring non-instantiability. 03 private RandomGenerators() {} 04 05 public static final RandomGenerator<Integer> getIntGenerator() { 06 return new RandomIntGenerator(Integer.MIN_VALUE, Integer.MAX_VALUE); 07 } 08 09 public static final RandomGenerator<String> getStringGenerator() { 10 return new RandomStringGenerator(''); 11 } 12 }
假設編寫了一個新的獲取隨機數的類,那麼只要讓這個類實現RandomGenerators,然後在getIntGenerator方法中修改返回值就可以了
4.在建立引數化例項的時候,使程式碼更簡潔
靜態工廠方法的缺點:
1.類如果不含有public或者protected的構造方法,就不能被子類化
不理解
2.靜態工廠方法與其他靜態方法沒有區別
在文件中沒有那麼容易認出靜態工廠方法