Apr. 28 22:30~23:58
第三天課程介紹4個設計模式,首先介紹Visitor,Teddy設計的例子是「檢查與操作遊戲地圖編輯器所產生的地圖」。
套用Visitor模式的三個步驟如下圖所示。
Visitor模式最後以介紹一個Eclipse使用Visitor的例子作為結尾。
***
接下來上場的是Proxy,Teddy設計例子是10幾年前Teddy在設計一個Intranet-based進銷存系統的例子。下面兩張投影片中的畫面截圖可是Teddy「珍藏」多年的壓箱寶。
1998年前後網路速度還很慢,當時的客戶從每個門市拉了一條14.4K的專線到總公司,在上線前夕才發現速度太慢,每一個畫面傳輸到門市都要等好幾秒。
還好當時Teddy讀了GoF的Design Patterns,套用Proxy這個模式在沒有大改系統的前提之下把這個問題給解決了。
***
倒數第二個模式,應該也是大部分的鄉民最少套用的模式,就是Interpreter 。Teddy設計了一個簡單的檔案處理語言作為Interpreter模式的練習範例。
Interpreter的實作其實不難,難的是…要先想辦法寫出正確的grammar。不過如果設計的語言不太複雜的話,這一點也不會太難,先拜一下Google大神,找看看有沒有跟自己設計的語言接近的grammar,參考別人的寫法再加以修改這樣會比較快一些。
逐步解釋範例語言的每一條grammar rule。
實作完成之後的執行結果。
***
Interpreter實作完畢之後有一個小小的測驗與問卷調查。
***
最後終於來到第23的模式Iterator。
Iterator和Observer類似,由於太常用了,所以很多語言都內建對於這兩個模式的支援。
***
以上,入門班與進階班加起來利用6天的時間將Christopher Alexander的模式原理、物件導向設計核心觀念、GoF書中的23設計模式全部都講解與實作一次,相信對於學員們日後工作上分析問題與設計系統應該會很有幫助。
學完全部23個設計模式,進度100%,好開心。
***
最後,幫第四梯次的Design Patterns入門實作班打個廣告,上課日期是6月22、23、29(六、日、六),報名網址在此:http://www.accupass.com/go/pattern1306。
***
友藏內心獨白:學了Interpreter之後就想要自己設計一個DSL了。