l

2014年6月30日 星期一

套用Pattern之前先確定它要解決什麼問題

June 29 20:40~21:36

螢幕截圖 2014-06-29 21.35.36

 

幾年前Teddy有一次跟指導教授聊天,當時指導教授正在研究Michael Jackson的《Problem Frames》。指導教授提到:「Michael Jackson在他的書中有提到Patterns,他認為Patterns最大的問題就是只關注解決方案(solution),沒有提到問題(problem)。」當時Teddy不明白這句話的意思,Alexander的Pattern,明明有包含Name、Context、Problem、Force、Solution、Resulting Context這六大元素,怎麼會沒有提到問題?

多年來指導教授多次誘導Teddy去閱讀Michael Jackson的《Problem Frames》,無奈讀了幾次都沒辦法領悟,也就暫時放下。後來有一陣子Teddy想把GoF的23個Design Patterns用Name、Context、Problem、Force、Solution、Resulting Context的格式重新整理,此時才發現,還真的無法一眼就看出這23個Design Patterns到底要解決什麼「問題」。

鄉民甲:GoF的每一個Design Patterns不是都有Intent這個欄位嗎?很多書都是透過Intent來介紹每一個Design Pattern。

Teddy:是這樣沒錯,但如果你仔細去看每一個Design Pattern的Intent,其實比較像是簡短的解決方案說明,而不是該設計模式要解決的問題。

***

今年六月的第七梯次「Design Patterns這樣學就會了:入門實作班」有學員問Teddy幾個問題:

  • 權限管理系統可否套用State?
  • Adapter和Facade有何不同 ?
  • State和Strategy有何不同 ?

以上這四個問題,以及其他更多在套用或比較不同Pattern差異時所遭遇到的困難,其根本原因,都可以說是「對每一個Pattern所要解決的問題了解得不夠徹底。」如果可以清楚說出每一個Pattern所要解決的問題,就可判斷上述四個問題的答案:

  • State要解決的問題是「當物件內部狀態改變時,你要如何讓它的行為也跟著改變,就好像這個物件換了另外一個人似的?」請問權限管理系統是否要解決相同的問題?
  • Adapter要解決的問題是「如何重複使用一個既存的類別?」,Facade要解決的問題是「 如何使用子系統?」
  • State要解決的問題是「當物件內部狀態改變時,你要如何讓它的行為也跟著改變,就好像這個物件換了另外一個人似的?」,Strategy要解決的問題是「如何讓物件切換行為實作?」

***

從pattern的解決方案,光是看class diagram,會覺得許多pattern都很相似。從問題出發,加上force與context,就可以清楚的區分每一個pattern的差異。

***

友藏內心獨白:Michael Jackson的Problem和Pattern的Problem是不一樣的挑眉質疑

2014年6月29日 星期日

2014京都考察之旅Day2-A蹴上傾斜鐵道 & 岡崎櫻迴廊

June 04 21:23~22:10

SuperHotel的早餐,有多種麵包、生菜沙拉、牛奶、咖啡、茶、水煮蛋、白飯、味增湯、炒麵等,是小而美的早餐,東西也都很好吃。

螢幕截圖 2014-06-04 15.41.15螢幕截圖 2014-06-04 15.41.32螢幕截圖 2014-06-04 15.41.47螢幕截圖 2014-06-04 15.41.57螢幕截圖 2014-06-04 15.42.09螢幕截圖 2014-06-04 15.42.17螢幕截圖 2014-06-04 15.43.53螢幕截圖 2014-06-04 15.42.28螢幕截圖 2014-06-04 15.42.45

***

今天早上預計到南禪寺附近乘船,這裡景點還不少。首先來到蹴上傾斜鐵道,這個鐵道當初是用來「載船」的,因為琵琶湖疏水道有兩段水道的落差較大,因此靠這個鐵道把小船從較低的河道運送到高處。鐵道在多年前已經停止使用,兩旁盛開的櫻花讓廢棄鐵道成為熱門的賞櫻景點。

螢幕截圖 2014-06-04 15.50.02螢幕截圖 2014-06-04 15.50.13螢幕截圖 2014-06-04 15.50.23螢幕截圖 2014-06-04 15.50.43螢幕截圖 2014-06-04 15.52.57螢幕截圖 2014-06-04 15.51.49螢幕截圖 2014-06-04 15.51.02螢幕截圖 2014-06-04 15.51.12螢幕截圖 2014-06-04 15.51.23螢幕截圖 2014-06-04 15.51.32螢幕截圖 2014-06-04 15.51.57螢幕截圖 2014-06-04 15.52.09螢幕截圖 2014-06-04 15.52.24螢幕截圖 2014-06-04 15.53.17螢幕截圖 2014-06-04 21.33.39

***

離開蹴上傾斜鐵道之後走沒幾分鐘就到了岡崎櫻迴廊,可在此搭船欣賞兩岸盛開的櫻花。來搭船的人還不少,大概每隔15分鐘就有一個船班,還算密集。隨船有一位講解員,但因為聽不懂日語所以只能用眼睛看挑眉質疑

螢幕截圖 2014-06-04 21.53.52螢幕截圖 2014-06-04 22.06.58螢幕截圖 2014-06-04 21.55.10螢幕截圖 2014-06-04 21.56.39螢幕截圖 2014-06-04 21.54.03螢幕截圖 2014-06-04 21.56.20螢幕截圖 2014-06-04 21.56.58螢幕截圖 2014-06-04 21.57.44螢幕截圖 2014-06-04 21.58.42螢幕截圖 2014-06-04 21.58.57螢幕截圖 2014-06-04 21.59.07螢幕截圖 2014-06-04 21.59.22螢幕截圖 2014-06-04 22.00.05螢幕截圖 2014-06-04 22.00.18螢幕截圖 2014-06-04 22.00.37螢幕截圖 2014-06-04 22.00.51螢幕截圖 2014-06-04 22.01.03螢幕截圖 2014-06-04 22.01.16

 

船走了10來分鐘到達終點,在此折返,最後回到原本搭船的地方。

螢幕截圖 2014-06-04 22.03.05螢幕截圖 2014-06-04 22.03.13螢幕截圖 2014-06-04 22.04.43螢幕截圖 2014-06-04 22.05.00螢幕截圖 2014-06-04 22.07.27螢幕截圖 2014-06-04 22.05.25螢幕截圖 2014-06-04 22.06.01螢幕截圖 2014-06-04 22.22.45螢幕截圖 2014-06-04 22.06.14螢幕截圖 2014-06-04 22.06.26螢幕截圖 2014-06-04 22.06.43螢幕截圖 2014-06-04 22.07.07

***

友藏內心獨白:生意好好。