1. 程式人生 > >Effective Java讀書筆記1-考慮使用靜態工廠代替構造器

Effective Java讀書筆記1-考慮使用靜態工廠代替構造器

靜態工廠方法(Static factory method)的優點:

1.靜態工廠方法有名稱

在需要多個建構函式且建構函式的引數型別完全一樣時,可以使用靜態工廠方法。而且可以選擇靜態工廠的名稱以突出他們之間的區別

2.不必在每次呼叫他們的時候建立一個新的類

這使得使用靜態工廠時,不會存在兩個相等的例項,及當且僅當a==b是a.equals(b)為true

3.可以返回原返回型別的任意子型別

1
	public interface RandomGenerator<T> {
2
	    T next();
3
	}

RandomIntGenerator 的第一個實現類如下:
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
	}
String型別的生成器如:
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.靜態工廠方法與其他靜態方法沒有區別

在文件中沒有那麼容易認出靜態工廠方法