學習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
(请您对文章做出评价)

<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

<!-- <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> -->

#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,精神還是一樣。
  回复  引用  查看   

你可能感兴趣的:(JavaScript,设计模式,C++,c,OO)