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了。
或許這篇文章可以帶來不同的想法 :-)
回覆刪除http://www.yinwang.org/blog-cn/2013/03/07/design-patterns/
這一篇文章我以前讀過,但我覺得這篇的內容看起來引經據典,但內容其實是『空話』。作者本身的學經歷的確非常漂亮,美國名校的PhD,但他並沒有說明(1)不用design patterns,那替代方案是什麼?(2) 並不是每個平民老百姓都跟他一樣聰明,能夠自然而然不套任何pattern就可以寫出他所謂的「代码直接,精巧而简单」。
刪除他文中提到這段話「你说我在贬低这本书的真正价值,因为 GoF 说了:“我们的贡献,就是给这些编程方式起名字。这样让广大程序员有共同的语言。” 如果这也叫贡献的话,我就可以写本书,给“空气”,“水”,“猪肉”这些东西全都起个新名字,让大家有“共同的语言”。这不是搞笑吗。」我大膽假設他應該沒有讀過「Christopher Alexander 」的一系列的書,沒有理解pattern領域所謂「共同語言」的背後意義。的確,Christopher Alexander 的方法在建築領域並沒有形成主流,但這並不表示在軟體或是其他領域這套方法就不 work。
我當初讀到這位老兄的這篇文章之後,我也很期待他可以給一些具體的例子,告訴我們不要套用 pattern 要如何寫出他所謂的「代码直接,精巧而简单」。但後來好像並沒有看到進一步的說明。如果 Mars 你還有看到這位老兄的其他見解也請提供讓我參考。
謝謝。
嗯,我讀完那篇文章的感覺是:
刪除1. design patterns基本想法是好的,但書中有許多"多對一"的情況,應該可以使用更精練的方式去架構。
2. 他點出的現象確實反映了目前現實情況。
他的具體例子可以在他的github看到:
https://github.com/yinwang0
其他文章:
http://www.yinwang.org/
或許作者有些自大,但見解方面的確一針見血。