l

2014年10月28日 星期二

如何辨識GoF Design Patterns的使用?

Oct. 27 07:59~09:00

螢幕截圖 2014-10-27 20.59.09

 

上禮拜上完【設計模式這樣學就會了:入門實作班】,每次上課的時候,Teddy都會了解一下學員想在這門課中學到什麼,一個經常聽到的期待就是:「如何辨別一個設計是否採用GoF的某個design patterns?」

這個問題可能有很多種方法,比較抽象一點的說法是「從pattern要解決的問題來判斷」,另外一種說法則是從辨識pattern的特徵開始。例如:

  • 如果你懷疑某個設計是不是Template Method,你就要問自己,template method定義在哪一個super class裡面?又有哪些primitive operation提供給subclass重新定義?
  • 如果是Facade,你要能夠回答Facade所隱藏的子系統是哪一個?Facade提供的介面在哪裡?
  • 如果是State,那些是和狀態有關的行為,這些行為被配置到那些concrete state物件上面?
  • 如果是Observer,擁有狀態的Subject是誰?
  • 如果是Adapter,則誰是Adaptee?Target介面又是什麼?
  • 如果是Abstract Factory,則由它所產生的一組產品物件在哪裡?這些產品物件有不同平台的不同實作嗎?
  • 如果是Strategy,你能夠找出一組可以彼此互相替代的演算法物件嗎?

***

在不同的班次中,經常會有學員問Teddy:「某某設計算不算是Facade?」Teddy通常會反問:「如果這個設計是一個Facade,請問它擋在哪個子系統的大門前?」如果找不到任何被這個設計所隱藏的子系統,應該就不能算是一個Facade。如果可以找到,則進一步問:「Facade定義了那些介面?」鄉民們可以自行練習看看,對於判斷某個設計是否套用某個pattern應該會有幫助。

***

友藏內心獨白:問對問題很重要。

沒有留言:

張貼留言