l

2016年5月25日 星期三

一個模式解決一個小問題

May 24 21:12~21:42

螢幕截圖 2016-05-24 21.37.58

▲Bridge Pattern:開發多國語言憤怒鳥的例子

 

泰迪軟體【Design Patterns這樣學就會了–入門實作班】招生中。

***

昨天在上Design Patterns企業內訓,講完Bridge的休息時間有一位很認真的學員問了一個問題:「Bridge建立起抽象體系和實作體系兩者之間的關係,假設還有另一個體系存在,我可以繼續套用Bridge來建立這三者之間的關係嗎?

Teddy不太了解這個問題的意義,於是請對方舉個實例。

***

學員:例如要支援多國語言。

Teddy:對於多國語言的支援會因為不同版本的憤怒鳥而有不同的翻譯內容嗎?

學員:不會。

Teddy:那多國語言的內容會因為平台不同,例如Android 5.0或Android 6.0而不同嗎?

學員:也不會。

Teddy:感覺起來這個問題和Bridge所要解決的問題不同。

Teddy:以pattern-based的設計流程來看,你的問題首先被Bridge給解決了,接著你檢視套用Bridge之後的結果(resulting context)是否還存在未被滿足的force?以我們講義上的例子來看,應該是沒有,Bridge已經把跨平台憤怒鳥的問題解完了。但是,你現在提出另一個需求,就是跨平台憤怒鳥要支援多國語言,因為我們剛剛介紹Bridge,所以你很自然的可能會想,支援多國語言的問題是不是可以被Bridge解決。

Teddy:思考某個問題是否可以套用某個pattern,首先要問這個問題是什麼?和準備套用的pattern所解決的問題是不是一樣的問題?以多國語言的例子,和Bridge所要解決的問題不同,你只需要先建立多國語言的對照表,然後在程式中使用到字串的時候去查這個表就可以了,好像不需要特別套用什麼pattern。如果真的想套pattern,你也可以去Google看看有沒有人幫「支援多國語言」寫一個pattern。

***

一個pattern只解決一個特定的(小)問題,要解決多個問題,需要套用不同的pattern。初學者在套用的過程中很容易不小心落入「為了套pattern而套pattern」的陷阱。要知道自己的design pattern有沒有學會,最簡單的方法之一就是問自己:「這個pattern要解決什麼問題?」如果回答得出來,就算懂了….百分之20%。

***

友藏內心獨白:其他的80%還有context、force、solution、resulting context。

沒有留言:

張貼留言