當生成物件的選擇性參數過多時, 用 Builder pattern 會省事許多, 這篇 《Builder Pattern》 講得很清楚並附有範例碼。關鍵在於:
- class A 的 builder class B 是 A 裡面的 static class
- 利用 B 的 constructor 參數指定必要參數
- 利用 B 的 member method 指定選擇性參數
- 提供一個 build() 用來生成 A 並傳入之前存下來的參數
- 若想寫得漂亮點, 可用個
public interface Builder
然後讓 B 實作 Builder{ public T build(); }
在一些 mock lib 裡 (如 pymox) 也會看到類似的寫法, 用 method 串接的方式設定過多的選擇性參數。還在揣摩這種寫法的優缺點, 大概等自己實際用上一次後, 才會體悟得較深。
書中有一句關鍵的描述:
The Builder pattern simulates named optional parameters.讓我想到一個有趣的議題: design patterns 其實是補足語言缺陷的產物。之前有看過一些很有深度的對照文或影片, 忘了記下來。剛才找到的一個例子是, 幾年前讀 Effective C++ 時, 看到一堆管 memory 的準則, 當時不太想學, 覺得有 garbage collection 的話就沒這問題, 自然也不需要發展出這些技巧。如同其它各種技術爭議一般, gc vs. 自己管記憶體? 這議題的標準答案當然是: 看情況。
沒有留言:
張貼留言