l

2013年4月29日 星期一

第一梯次Design Patterns這樣學就會了進階實作班,Day3實況報導

Apr. 28 22:30~23:58

螢幕快照 2013-04-28 下午10.32.03

 

第三天課程介紹4個設計模式,首先介紹Visitor,Teddy設計的例子是「檢查與操作遊戲地圖編輯器所產生的地圖」。

螢幕快照 2013-04-28 下午10.50.45

 

套用Visitor模式的三個步驟如下圖所示。

螢幕快照 2013-04-28 下午10.53.52

 

Visitor模式最後以介紹一個Eclipse使用Visitor的例子作為結尾。

螢幕快照 2013-04-28 下午10.56.45

***

接下來上場的是Proxy,Teddy設計例子是10幾年前Teddy在設計一個Intranet-based進銷存系統的例子。下面兩張投影片中的畫面截圖可是Teddy「珍藏」多年的壓箱寶熱戀

螢幕快照 2013-04-28 下午11.00.09

螢幕快照 2013-04-28 下午11.00.30

 

1998年前後網路速度還很慢,當時的客戶從每個門市拉了一條14.4K的專線到總公司,在上線前夕才發現速度太慢,每一個畫面傳輸到門市都要等好幾秒。

螢幕快照 2013-04-28 下午11.01.42

 

還好當時Teddy讀了GoF的Design Patterns,套用Proxy這個模式在沒有大改系統的前提之下把這個問題給解決了。

螢幕快照 2013-04-28 下午11.08.40

***

倒數第二個模式,應該也是大部分的鄉民最少套用的模式,就是Interpreter 。Teddy設計了一個簡單的檔案處理語言作為Interpreter模式的練習範例。

螢幕快照 2013-04-28 下午11.15.05

 

Interpreter的實作其實不難,難的是…要先想辦法寫出正確的grammar。不過如果設計的語言不太複雜的話,這一點也不會太難,先拜一下Google大神,找看看有沒有跟自己設計的語言接近的grammar,參考別人的寫法再加以修改這樣會比較快一些。

螢幕快照 2013-04-28 下午11.17.38

 

逐步解釋範例語言的每一條grammar rule。

螢幕快照 2013-04-28 下午11.24.50

 

實作完成之後的執行結果。

螢幕快照 2013-04-28 下午11.23.21

***

Interpreter實作完畢之後有一個小小的測驗與問卷調查。

螢幕快照 2013-04-28 下午11.34.37

***

最後終於來到第23的模式Iterator。

螢幕快照 2013-04-28 下午11.38.13

 

Iterator和Observer類似,由於太常用了,所以很多語言都內建對於這兩個模式的支援。

螢幕快照 2013-04-28 下午11.37.17

螢幕快照 2013-04-28 下午11.37.28

***

以上,入門班與進階班加起來利用6天的時間將Christopher Alexander的模式原理、物件導向設計核心觀念、GoF書中的23設計模式全部都講解與實作一次,相信對於學員們日後工作上分析問題與設計系統應該會很有幫助。

螢幕快照 2013-04-28 下午11.42.31

 

學完全部23個設計模式,進度100%,好開心熱戀

螢幕快照 2013-04-28 下午11.48.37

***

最後,幫第四梯次的Design Patterns入門實作班打個廣告,上課日期是6月22、23、29(六、日、六),報名網址在此:http://www.accupass.com/go/pattern1306

041208899296854

***

友藏內心獨白:學了Interpreter之後就想要自己設計一個DSL了很棒

3 則留言:

  1. 或許這篇文章可以帶來不同的想法 :-)
    http://www.yinwang.org/blog-cn/2013/03/07/design-patterns/

    回覆刪除
    回覆
    1. 這一篇文章我以前讀過,但我覺得這篇的內容看起來引經據典,但內容其實是『空話』。作者本身的學經歷的確非常漂亮,美國名校的PhD,但他並沒有說明(1)不用design patterns,那替代方案是什麼?(2) 並不是每個平民老百姓都跟他一樣聰明,能夠自然而然不套任何pattern就可以寫出他所謂的「代码直接,精巧而简单」。

      他文中提到這段話「你说我在贬低这本书的真正价值,因为 GoF 说了:“我们的贡献,就是给这些编程方式起名字。这样让广大程序员有共同的语言。” 如果这也叫贡献的话,我就可以写本书,给“空气”,“水”,“猪肉”这些东西全都起个新名字,让大家有“共同的语言”。这不是搞笑吗。」我大膽假設他應該沒有讀過「Christopher Alexander 」的一系列的書,沒有理解pattern領域所謂「共同語言」的背後意義。的確,Christopher Alexander 的方法在建築領域並沒有形成主流,但這並不表示在軟體或是其他領域這套方法就不 work。

      我當初讀到這位老兄的這篇文章之後,我也很期待他可以給一些具體的例子,告訴我們不要套用 pattern 要如何寫出他所謂的「代码直接,精巧而简单」。但後來好像並沒有看到進一步的說明。如果 Mars 你還有看到這位老兄的其他見解也請提供讓我參考。

      謝謝。

      刪除
    2. 嗯,我讀完那篇文章的感覺是:
      1. design patterns基本想法是好的,但書中有許多"多對一"的情況,應該可以使用更精練的方式去架構。
      2. 他點出的現象確實反映了目前現實情況。
      他的具體例子可以在他的github看到:
      https://github.com/yinwang0
      其他文章:
      http://www.yinwang.org/
      或許作者有些自大,但見解方面的確一針見血。

      刪除