l

2015年8月27日 星期四

如何套用設計模式?

August 25 16:31~17:43

螢幕截圖 2015-08-25 17.36.41

 

關於design pattern(設計模式),Teddy最常被問的一個問題就是:「如何套用pattern?」或是「我怎麼知道pattern有沒有套對?」其實這個問題的答案很簡單:

  1. 如果不套pattern就可以解決問題,那就不要套pattern。
  2. 如果某個問題一定要套用pattern,套完之後請留意resulting context。如果這個resulting context你可以接受,問題解到這裡就可以告一段落。如果不能接受,有兩個可能性:
    • 套錯pattern:選用了錯誤的答案來解決問題,請選擇另一個pattern再試一次。
    • 再套另一個pattern:原本套用的pattern留了一些force沒有解決,或是產生了新的force。此時可考慮套用另一個pattern來處理這些遺留的force。如果選擇套用另一個pattern,則原先pattern的resulting context就變成下一個pattern的context

***

聽起來有點抽象,沒關係,請看一個剛出爐熱騰騰的例子。上週末Teddy到台中上「Design Patterns這樣學就會了–入門實作班」,第二天吃下午茶的時候,看到餐具Teddy嚇了一跳,誰那麼有創意,把塑膠湯匙插入喝珍珠奶茶的粗吸管裡面?

螢幕截圖 2015-08-25 16.58.20

 

Context:綠豆薏仁湯裝在500 C C的飲料杯中。

Problem:如何吃到綠豆薏仁湯?

Solution用嘴巴吃 用塑膠湯匙將綠豆薏仁湯舀出。

Resulting Context

  • 使用塑膠湯匙可以順利舀起綠豆薏仁湯食用。
  • 杯身太高,手很容易碰觸到杯子內緣而變的黏黏的。

***

很顯然「塑膠湯匙」這個pattern沒有把問題解的很漂亮。如果鄉民們知道有另一個pattern叫做「長柄湯匙」,也許可以嘗試改套用其他pattern。由於店家沒有「長柄湯匙」這個pattern,於是套用「粗吸管」這個pattern,來解決「手很容易碰觸到杯子內緣」這個衍生的問題。

Context:你用塑膠湯匙舀起放在 500 C C 影料杯的綠豆薏仁湯,但杯身太高導致你的手碰觸到杯子內緣而變的黏黏的。

Problem:如何避免手變的黏黏的?

Solution:將塑膠湯匙尾端插入粗吸管,固定後拿著粗吸管使用塑膠湯匙將綠豆薏仁湯舀出,便可讓手不碰觸到杯子內緣。

Resulting Context

  • 道具看起來很特別。
  • 可以順利吃到綠豆薏仁湯。
  • 使用兩種餐具,有不環保的嫌疑。

***

使用pattern解決問題的流程就是那麼簡單。看到這裡鄉民們可能會說:「我聽你在放風箏,真實生活中軟體設計的問題哪有那麼簡單就解了!」的確,還有一件難的事情Teddy還沒說,就是「採用這種方式解決問題,你必須要知道足夠多的pattern,才有可能針對不同的狀況套用不同的pattern。」這麼多pattern怎麼學?了解Alexander對於設計的看法,以及pattern六大基本元素之後,學習新的pattern會容易許多。

***

友藏內心獨白:真佩服台中飲料店的智慧啊。

沒有留言:

張貼留言