軟體工程中的食譜
業界專家行之有年的經驗證明出這些patterns是經常性出現的設計難題的最好解答,所以是很實用的。工程師之間了解design patterns的話,溝通也更精準,例如"這邊使用一個singleton pattern"。
Gang of Four
總共有23種,分成以下幾類:1. creational patterns: 講述如何製造物件
2. structural patterns: 講述物件之間的關係
3. behavioral patterns: 講述物件間的責任,如何達成common goal
類別沒有那麼清楚,也是有模糊空間。
Singleton Pattern
某個class只能創造唯一一個instance,這種creational pattern稱為Singleton。通常用在一個globally accessible object,而且合理的只能存在唯一的instance,例如系統的preference。
implementation可以簡單的利用private constructor,以及private static instance variable:
至於globally accessible的部分,就在於提供了一個class method來得到這個private instance variable。
另外這邊也用到了lazy creation,這對instance creation非常耗resource的class來說是個節省資源的好方法。
注意! 上面的implementation不是thread-safe,當多個thread嘗試獲取這個singleton instance的時候,race condition就會產生,單純對getInstance()做synchronization保護的話,只能保護object creation是synchronized,但不能確保這個singleton屬性的改變是thread-safe。
Factory Object Pattern (Not GoF pattern!)
簡單來說就是讓client把建立object 的責任delegate出去給一個factory object,在client選型號之後,一個工廠object就把東西丟出來給client,以下面例子:client使用方式如下:
優點: 工廠新增或是刪除或是改變instantiation的方式,都不會動到client code。
限制: 不過client只能面對base class interface,舉例來說,各種Knife的subclass都被client用Knife type variable去承接,除非約定好工廠出來的東西一定是那個subclass,那就可以利用type casting去安全使用之。
沒有留言:
張貼留言