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