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,並與別人溝通。
» 下一篇: (原創) 如何交換兩個變數,而不動用第三個變數? (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
评论
982431同意楼主,不过这个放首页有点简单了。 回复 引用 查看
#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,精神還是一樣。 回复 引用 查看