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,並與別人溝通。
<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>
<!--
<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
同意楼主,不过这个放首页有点简单了。 回复 引用 查看
说的有道理。 回复 引用 查看
......
加幾個例子引證就好了。
不錯的。
請問樓主是不是設計主板的? 回复 引用
#4楼 2007-09-06 22:35 壁虎
不错,支持 回复 引用 查看
將重點放在class diagram上,不要放在example code上
这一点非常地同意,但不建议初学者这样学习,或者说过于重点地转移自己的视线,理由很简单,因为diagram太抽象,抽象的东西就显得复杂,因此就更难掌握了,本来就是一项灵活多变的应用,因此学习方法要更加地注意效率。
从Develop environment的发展状况来审视,我们应该不难发现Diagram的重要性,或者说,如果你是一个Programer的话,你可能会更重视Code,如果你是一个Designer的话,那么你可能会更重视Diagram,当然了,想成为programer还是designer,这得由你自己决定,不过总是相信一句话,名师出高徒,这句话照表面理解倒是有点偏,用个比喻就是说,看着老虎画猫永远比看着老鼠画猫要逼真,除非你是个白痴或者笨蛋才会将这样的规律特殊化。
回复 引用 查看
no spam, please. 回复 引用
@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的美。”
这几天一直在想这句话,很有启发。 回复 引用 查看
> 從client體會Design Pattern的美
设计模式是美吗?我看是无奈。类图越复杂就是越丑陋。因为就实现灵活性必须按复杂的模式实现。所以应该体会设计模式为什么要这样,体会它的无奈。具体应用时,要竭力排除不必要的灵活性,使设计模式退化。 回复 引用
每個人都可以發表自己的觀點,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,精神還是一樣。 回复 引用 查看
分享到:
相关推荐
Design*Pattern*Framework*4.5
JAVA software design pattern
Theresa Neil's new book "Mobile Design Pattern Gallery" provides solutions to common design challenges. There is inspiration on every topic from designing your application's navigation to choosing ...
design pattern design pattern
Head First Design Pattern
Design Pattern for dummnies
Design Pattern中文版
DesignPattern 设计模式,共10章。内容详细,案例设计齐全。对设计可复用的面向对象的软件很有帮助,有助你写出又质量,并且可重复使用的高品质软件
Design Pattern英文版.chm Introduction of "Design Pattern".
Design Pattern 简明手册,设计模式查阅简明手册
ood designd
《Design Pattern》中文/英文版+学习笔记+英文网页版. 设计模式的,来到这里的应该都知道.
著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...
factory mode ppt in design pattern
Learn Design Pattern through Java library. This is a new way to learn design pattern.
深入浅出设计模式 (Head First Design Pattern)_带书签 深入浅出设计模式 (Head First Design Pattern)_带书签
Mobile Design Pattern Gallery : UI Patterns for Mobile Applications原版 全彩 120M大容量《移动应用ui设计模式》是一本移动应用ui 设计模式参考书,分10 大类介绍了70 个移动应用设计模式(包括反模式),用400 ...
A Functional Pattern System for Object-Oriented Design Thomas K¨uhne