天天看點

學習Design Pattern的小技巧 (OO) (Design Pattern)

Abstract

很多人學習Design Pattern,總是被眾多的class暈了頭,認為Design Pattern是『化簡為繁』,是以抓不到學習的重點,在此分享一下我的學習心得。

Introduction

關於學習Design Pattern,以下是我的兩點建議

1.將重點放在class diagram上,不要放在example code上

每本書的example code都不一樣,有的很簡單,有的很複雜,甚至牽涉到domain或algorithm,這樣反而將容易失焦。example code目的隻是要我們了解Design Pattern,而非迷失在example code中,將焦點重新放在class diagram上,思考整個架構的意義。

2.從client體會Design Pattern的美

Design Pattern就是為了『擁抱變化』,是以將來若『需求改變』,能讓client的main()完全不需改變,或僅做很少的改變,則是Design Pattern的目的。這也是為什麼Design Pattern 3大原則第一條就是說:『Program to an interface, not an implementation』。但凡事都是trade-off,要讓client漂亮,換來的就是library的class變多變複雜了,是以我常從client的角度去思考,體會Design Pattern的美。

3.熟記並了解每個pattern的Intent(目的)

因為Design Pattern都是基於多型/多態,都是靠delegation的手法,是以很多pattern非常的像,甚至可以說某個pattern指是另外一個pattern的特例(如strategy和bridge就非常的像,strategy可以說是bridge的特例),搞清楚pattern的intent,才能用對pattern,並與別人溝通。

0 0 0 (請您對文章做出評價) « 上一篇: (原創) 如何在Visual Studio 2005編譯boost 1.34.1? (C/C++) (VC++) (boost)

» 下一篇: (原創) 如何交換兩個變數,而不動用第三個變數? (C/C++) (C) (.NET) (C#)

<script src="http://partner.googleadservices.com/gampad/google_service.js" type="text/javascript"></script><script type="text/javascript"></script><script src="http://partner.googleadservices.com/gampad/google_ads.js"></script><script type="text/javascript"></script><script type="text/javascript"></script><script type="text/javascript"></script>

posted on 2007-09-06 20:23 真 OO無雙 閱讀(3420) 評論(12)  編輯 收藏 網摘 所屬分類: Design Pattern

學習Design Pattern的小技巧 (OO) (Design Pattern)

<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://www.cnblogs.com/oomusou/archive/2007/09/06/884843.html" dc:identifier="http://www.cnblogs.com/oomusou/archive/2007/09/06/884843.html" dc:title="" trackback:ping="http://www.cnblogs.com/oomusou/services/trackbacks/884843.aspx" /> </rdf:RDF> -->

評論

982431 #1樓 2007-09-06 21:08 beyondjay       

同意樓主,不過這個放首頁有點簡單了。   回複  引用  檢視    

#2樓 2007-09-06 21:25 木野狐(Neil Chen)      

說的有道理。   回複  引用  檢視    

#3樓 2007-09-06 22:04 無心之木[未注冊使用者]

......

加幾個例子引證就好了。

不錯的。

請問樓主是不是設計主機闆的?   回複  引用    

#4樓 2007-09-06 22:35 壁虎      

不錯,支援   回複  引用  檢視    

#5樓 2007-09-07 00:06 volnet(可以叫我大V)      

將重點放在class diagram上,不要放在example code上

這一點非常地同意,但不建議初學者這樣學習,或者說過于重點地轉移自己的視線,理由很簡單,因為diagram太抽象,抽象的東西就顯得複雜,是以就更難掌握了,本來就是一項靈活多變的應用,是以學習方法要更加地注意效率。

從Develop environment的發展狀況來審視,我們應該不難發現Diagram的重要性,或者說,如果你是一個Programer的話,你可能會更重視Code,如果你是一個Designer的話,那麼你可能會更重視Diagram,當然了,想成為programer還是designer,這得由你自己決定,不過總是相信一句話,名師出高徒,這句話照表面了解倒是有點偏,用個比喻就是說,看着老虎畫貓永遠比看着老鼠畫貓要逼真,除非你是個白癡或者笨蛋才會将這樣的規律特殊化。

  回複  引用  檢視    

#6樓 2007-09-07 03:18 mercury[未注冊使用者]

no spam, please.   回複  引用    

#7樓 2007-09-07 08:14 sekihin      

@volnet(可以叫我大V)

樓上說的很中肯。

我是個初學者,就是通過設計模式的example code學習OOP的。效果very good。   回複  引用  檢視    

#8樓 2007-09-07 08:20 1-2-3      

樓主好厲害,可以設計IC。不知道IC設計需不需要OO?   回複  引用  檢視    

#9樓 2007-09-10 08:03 1-2-3      

“要讓client漂亮,換來的就是library的class變多變複雜了,是以我常從client的角度去思考,體會Design Pattern的美。”

這幾天一直在想這句話,很有啟發。   回複  引用  檢視    

#10樓 2007-10-11 10:32 金慶[未注冊使用者]

> 從client體會Design Pattern的美

設計模式是美嗎?我看是無奈。類圖越複雜就是越醜陋。因為就實作靈活性必須按複雜的模式實作。是以應該體會設計模式為什麼要這樣,體會它的無奈。具體應用時,要竭力排除不必要的靈活性,使設計模式退化。   回複  引用    

#11樓 2007-12-04 14:19 斧頭幫少幫主      

每個人都可以發表自己的觀點,I agree with 樓主.

@金慶

【具體應用時,要竭力排除不必要的靈活性,使設計模式退化。】

都不想用,還學DP幹嘛?如果DP不好,也就沒這麼多人學習了,至少說明DP對許多項目有用.   回複  引用  檢視    

#12樓[樓主] 2007-12-04 16:33 真 OO無雙      

@斧頭幫少幫主

不過有一個無奈倒是真的:若語言不支援,隻好用Design Pattern達成,如C++這種十年不改的語言,Design Pattern就挺有用,若語言肯進步,如C#直接在語法支援Design Pattern,用起來就相當簡潔(如observer,visitor, iterator..這些在C#已經語法支援,用起來相當簡潔)

不過總而言之,無論語言是否有新語法直接支援Design Pattern,精神還是一樣。   回複  引用  檢視   

繼續閱讀