精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 系统分析>>自开版到2000-04-10待整理精华>>什么是Design Pattern (1)

主题:什么是Design Pattern (1)
发信人: fork_zombie()
整理人: majorsun(2000-03-07 20:01:21), 站内信件
前:
这本是小弟在JAVA版的POST,由于和彼版的主题有出入,没什么回音,所以刚
开了个头,便停了下来.经友人提醒,改投到此版,希望得到大家的帮助.共同
努力,让Design Pattern成为开发中的重要工具.

注:
1.本文的内容属Tutorial,无法保证内容的严谨,仅供参考,所举的例子,多
为小弟个人的经验和理解,如果有什么地方不妥,还望多多指正!
2.所有代码实例均以java为主,个别处会用C++
3.Design Patter属Object Oriented Design的范畴,和本版主题相合

                   什么是Design Pattern... 

在OO Design中,reueable 是一个非常重要的组成部分。也就是说如何 
让你的code能被其他的程序利用是design的关键部分! 

让code reuseable有多种办法,除了oo language本身的hirechay等特性 
外,把现实中的问题记录下来,然后发表,可防止重复的开发过程。 

Design Pattern就是一些已被记录的方法,并且有系统的描述。 
根据 Christopher Alexander “每个pattern描述了在特定环境下发生了 
很多次的问题,然后你便可以描述这些问题的共性并提供解决的办法” 
这就好象砖头一定是方的,这样他便能很容易地和其他砖头一起被砌成 
房子。 

Java在resuseable方面有突出的表现,如interface的引入,使很多在 
c++中暧昧的继承关系得到有效的解决。应该来说,java语言的本身拥有 
很多OO的嫡系血统,整合了现代的编程方法。当然我们都了解有关 
implementation的缺陷使得它的应用受到很大限制。但从design的角度 
说,它的确是一种非凡的东西。这也是为什么我想用它来解释pattern的 
原因。 

实例1:在sun java的native lib中,我们随处可见design pattern的身 
影。比如在新的event model中,Listener 便是一种叫Observer的 
pattern(MFC 中的notification 也是出于其中) 

实例2:JFC UI种的plugable Look & Feel 结合了Abstract Factory 和 
Bridge Pattern。前者能产生一组widget factory,而后者则提供了建立 
在一致interface上具体的实现方法。 

当然在实际的开发中你可能遇到各种问题,如果你能把它们系统地记录 
下来并提供实际的解决办法,这就可能是一种新的pattern。但记住 
pattern是能解决一类问题的方法,而不是一个问题。所以对一类问题的 
共性归类很重要。在以后我们会介绍如何来做这方面的工作。 

虽然Design Pattern源自于Object Oriented Design的方法,但它又是 
完全基于实践的。因此选择何种语言及上下文的关系对与读者至关重要。 
基本上每种Pattern都会有相应的UML(1)和Interactive Diagram(2),同 
时配以简洁的示范代码来表达作者在当时的想法。 

可以想象一种Pattern的应用面决定不止以某种特定的场景。打个比方, 
Composite Pattern这种建立于包含关系的object structure可以表达 
很多类事物,如桌面应用文件的结构,网络中分布对象的集合等等,它 
并没有局限于某类应用。 

而基于不同的实现语言,Pattern的实现也会很不一样。我们以后会提到 
的Singleton在C++中的实现和Java中的实现有很大的区别。 

大致上每种Pattern都包含了一下几个部分。 

Pattern Name: 名字 

Problem: 讲述Pattern的来源及上下文关系。问题的种类可有很多种,有时 
我们可能想用objects来表达某种算法,而有时确是为了如何表达objects 
之间的结构。而且在一些情况下我们还要告诉读者在碰到这个问题前,我们 
已经用何种方法解决了前因。 

The Solution:解决之道。包括用哪些元素来做Design,Element之间的关 
系,结构,调用的顺序,变种等等。为了清析的表达一个Design,往往 
辅助以UML,Interactive Diagram,Code Sample等。因为Pattern 就象一种 
Tempelate,可以应用于不同的场合,所以Solution不应该是描述一中特定 
的设计。 

The Consequence:结果。这是最容易被人忽视的一点。因为Design的需要 
Pattern并不往往是最有效率的方案,在一些情况下,我们牺牲很有效率的 
方案仅仅是为了让别人能看懂我们的程序。(个人认为这很重要)所以我们 
一定要注明在那些地方我们做了妥协。并尽可能地预计所会产生的正面 
及负面效果。 

注: 
UML:Unified Modeling Language是解释Class静态关系的一种图表 
Interactive Diagram:描述objects之间的动态关系 


--
Zmobie
-----------
ICQ:6256854

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 203.101.50.167]
发信人: wjanry (janry), 信区: SystemAnalysis
标  题: Re: 什么是Design Pattern (1)
发信站: 网易虚拟社区 (Fri Aug 27 13:45:10 1999), 站内信件

【 在 fork_zombie (Zombie) 的大作中提到: 】
: 前:
: 这本是小弟在JAVA版的POST,由于和彼版的主题有出入,没什么回音,所以刚
: 开了个头,便停了下来.经友人提醒,改投到此版,希望得到大家的帮助.共同
: 努力,让Design Pattern成为开发中的重要工具.
:    .......

建议:到http://www.cetus-links.org, 那里有许多关于Design Pattern 
方面的文章这也是目前方法的最好站点内容很丰富


--
※ 修改:.wjanry 于 Aug 30 13:17:20 修改本文.[FROM: 202.96.184.117]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.185.60]
发信人: hyenachenyao (BlueHyena), 信区: SystemAnalysis
标  题: Re: 什么是Design Pattern (1)
发信站: 网易虚拟社区 (Fri Aug 27 21:03:56 1999), 站内信件

【 在 wjanry (janry) 的大作中提到: 】
: 【 在 fork_zombie (Zombie) 的大作中提到: 】
: : 前:
: : 这本是小弟在JAVA版的POST,由于和彼版的主题有出入,没什么回音,所以刚
: : 开了个头,便停了下来.经友人提醒,改投到此版,希望得到大家的帮助.共同
:    .......
Very good site. Thank you millon. By the way, could you tell me 
others good site about that? Do you have your home page?


--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.72.251.139]

[关闭][返回]