发信人: 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]
|
|