`
gstarwd
  • 浏览: 1525246 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    oodesign pattern

    "oodesign pattern" 提到的核心是面向对象设计模式,这是一种在面向对象编程中广泛使用的、经过实践验证的设计策略。设计模式是对在特定上下文中反复出现的问题及其解决方案的一种描述,它们提供了一种标准的方法来...

    Design*Pattern*Framework*4.5

    "Design*Pattern*Framework*4.5" 可能指的是一个基于 .NET Framework 4.5 的设计模式实现或教程集合。 设计模式是经验丰富的软件开发者的智慧结晶,它们被分为三类:创建型、结构型和行为型。创建型模式涉及对象的...

    Design Patterns For Dummies_designpattern_asvdr_

    Design Pattern for dummnies

    design pattern

    在给定的压缩包文件中,包含了九种经典的设计模式示例,它们分别是:单例模式(Singleton)、策略模式(StrategyPattern)、适配器模式(AdapterPattern)、装饰者模式(DecoratorPattern)、抽象工厂模式...

    Design Pattern英文版.chm

    Design Pattern英文版.chm Introduction of "Design Pattern".

    DesignPattern设计模式

    《DesignPattern设计模式》是软件开发领域中的一部经典之作,它主要探讨的是在面向对象编程中如何设计可复用、高效且具有高质量的代码。设计模式是对在软件设计过程中遇到的常见问题的一种最佳实践解决方案的总结,...

    Head First Design Pattern 学习笔记

    著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...

    DesignPattern-master_designpattern_powerful854_

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题,...在DesignPattern-master这个压缩包中,你可能找到每种模式的实例代码、示例、解释和使用场景,对于深入学习和实践设计模式非常有帮助。

    深入浅出设计模式 (Head First Design Pattern)_带书签

    深入浅出设计模式 (Head First Design Pattern)_带书签 深入浅出设计模式 (Head First Design Pattern)_带书签

    Mobile Design Pattern Gallery

    Theresa Neil的著作《Mobile Design Pattern Gallery》应运而生,这本书为移动应用设计中常见的挑战提供了一系列解决方案。从应用程序的导航设计到选择合适的邀请技巧,每一章都提供了丰富的设计灵感。 移动应用...

    Designpattern.zip

    在这个名为"Designpattern.zip"的压缩包中,我们聚焦于Java编程语言中的一个关键设计模式——工厂模式。这个模式属于创建型模式,它提供了一种创建对象的最佳方式,旨在简化对象的创建过程,并提高代码的可读性和可...

    Design Pattern英文版

    设计模式(Design Pattern)是软件工程中的一种经验总结,它是在特定上下文中为解决常见问题而提出的一套可复用的解决方案。设计模式并不直接实现为代码,而是提供了一种在面向对象设计中如何处理常见问题的指南。...

    高清扫描head first design pattern

    比现在csdn上的headfirst design pattern要清晰得多

    headfirst design pattern C++ code

    headfirst design pattern C++ code

    设计模式英文版-Design Pattern Explained

    在《设计模式英文版-Design Pattern Explained》这本书中,作者深入浅出地介绍了设计模式的概念及其在软件开发中的应用。本书不仅适合已经熟悉面向对象编程的开发者,也适合那些希望通过学习设计模式来提高自己技术...

    java design pattern

    java design pattern code back up

    Head First Design Pattern

    通过阅读《Head First Design Patterns》,读者不仅能掌握设计模式的精髓,还能学习如何在实际编程中灵活运用这些模式,提升代码质量,提高团队协作效率。无论你是初学者还是有经验的开发者,这本书都能为你带来宝贵...

    design pattern 设计模式 清晰中文版

    设计模式是软件工程中的一种重要思想,用于解决在软件开发过程中常见的问题,提供了一套可..."Design Pattern CHN"这份文档应该包含了这些模式的中文解释和示例,对于初学者和有经验的开发者来说都是极好的学习资料。

    designpattern.zip

    本资源"designpattern.zip"包含了对Java中23种经典设计模式的详细讲解和代码实例,对于中高级Java工程师来说,是提升开发技能的必备学习材料。 设计模式通常分为创建型、结构型和行为型三大类。创建型设计模式关注...

Global site tag (gtag.js) - Google Analytics