`
cjwxd126715
  • 浏览: 55600 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

设计模式的作用

阅读更多

   构建一个优秀的系统最困难之处不在于编码(coding),而是在早期 做出的设计(design)上的决定。设计是软件开发生命周期中的关键阶段,好的设计能产生好的产品,而不当的设计则会影响最终产品的质量。设计的重要性 已经深入人心,这从人们热烈讨论和研究设计模式就能看出来。设计模式是拥有多年开发设计经验的人给我们的经验传承,它是作为专家的建议而引入的,它背后的 真正威力是其对真实世界的抽象。如果我们没有足够的经验,我们很难做出好的设计,但是富有经验的开发者和设计者以设计模式的形式将他们的经验传授给我们, 拥有了这些经验之后,我们也能做出好的设计来了。不仅如此,设计模式还提高了我们软件复用的水平,从而提高了生产效率。

    模式的简史和分类

    软件设计模式的思想从建筑领域(Christopher Alexander)进化而来。Kent Beck 和 Ward Cunningham将Christopher Alexander的思想应用到软件领域,他们记下了最初的一些模式(UI方面的);第一个发表的关于在开发中使用模式的著述是Erich Gamma于1991年发表的一篇论文;而最著名的GOF的设计模式(1995)了。

    依照开发阶段,模式可以被分类为分析模式(analysis patterns)、架构模式(architecture patterns)、设计模式(design patterns)和Idiom:

    1、 分析模式——分析包括透过需求的表面去了解本质问题。分析模式就是业务模型中的一组表达了通用基础结构的概念。 
    2、 架构模式——架构模式表达了软件系统的基础结构组织模型。它提供了一套预先确定的子系统和组件,说明了其职责,还包括为组织它们之间的关系而规定的规则和指导原则。 
    3、 设计模式——一个设计模式提供了一个模型,此模型提炼了一个软件系统的子系统或组件。它描述了一个通用的可复用的组件,此组件解决了某特定上下文的一般性的设计问题。
    4、 Idiom——对某个语言特有的一个低级别的模式。比如某些模式只能使用多继承的语言表达(c++)。

    模式的使用现状

    现有的讨论设计模式的书籍著作大多都是介绍和记录设计模式的,而很少有论及如何在开发新的应用时系统地应用这些可复用的设计。

    可以将在应用中使用设计模式分为两个等级:

    1、 偶尔用用。
    2、 系统地使用。系统地使用设计模式超出了只是使用某个特定的模式,它可以被分为:

    A、 模式语言(Pattern Languages)。一个模式语言提供了能解决特定领域问题的一系列模式。它不仅提供了设计模式本身,还提供了这些设计模式之间的关系。它们意味着应用此模式语言完全解决特定领域问题的过程。
    B、 开发过程(Development processes)。一个系统化的开发过程定义了一个模式组合方法、分析和设计的步骤、设计模型和自动化开发步骤的工具。

    系统化的开发过程是唯一能使设计模式成为开发中的惯例(common practice)的方法。为此,我们需要作:

    1. 定义合成技术。此技术可以被用来组合设计模式去构造系统。
    2. 使用合适的模型语言支持此合成技术。


POAD

    在面对一个新的复杂的系统的时候,在我们应用多个设计模式去解决实际问题的时候,会遇到一些挑战:

    1、 是什么证明一个模式可以作为一个设计组件?如何为整合其它模式,我们如何定义模式的接口?
    2、 我们能从设计模式单独地组合应用吗?很多应用使用一个到多个设计模式。挑战是否能通过粘合设计模式来构建应用,这些模式如何接口,现有的模式是否够用,以及应该用什么类型的模式。
    3、 我们如何应用设计模式系统地开发应用。

    而POAD能解决这些问题:POAD——Pattern-Oriented Analysis and Design(面向模式的分析和设计),它使用结构的合成在高层次的设计上粘合(glue)设计模式,它基于这样的前提:在某些设计层次,对于应用于应用 的设计模式有足够的认识,并且设计者不会受制于模式的内部设计细节。POAD提供逻辑视图去表达作为模式组合的应用设计,还提供必须的方法去跟踪这些模式 的参与者到应用的最终类图里面。POAD的用途包括:

    1、 促进基于模式的开发。
    2、 改进系统化的方法去粘合(glue)模式。
    3、 开发设计框架。通过使用模式作为设计积木使得开发设计框架变得容易。
    4、 提高设计质量。

    总体来说,POAD使用UML作为建模语言,定义了一个设计方法论,它把模式当作设计中的building blocks或者component,认为模式具有在设计层次被组合的能力。POAD定义了一个特别的模式类型称为构造型设计模式 (constructional design patterns),并且定义了多个层次的抽象和逻辑视图。POAD还定义了这些层次是如何按照类(class)被追踪到低层次的设计。
    在这里有一个重要的术语“角色(Role)”,角色图(Role Diagram)被用来记载设计模式的行为。基于角色的方法认为一个模式为一个角色的协作。一个角色是一个特定的行为,此行为作为和其它角色的协作的结果 而定义。一个设计模式捕捉了一个能用一组交互的角色模型化的行为。为了组合模式,每个模式都被描绘称为一个角色图。通常我们见到的描述模式的是类图,而用 角色图描述模式的时候,则将其进行了更高的抽象,比如对于抽象工厂模式,在角色图中表示为:工厂角色和产品角色。角色模型的好处在于提供了比类图更高级的 抽象,它抽象了模式背后的主要思想。从而通过角色模型可以组合模式:

    1、 将所有现有的模式使用角色图建模。
    2、 The design uses a prototypical pattern application to derive the composite design pattern. A prototypical application is a concrete application, which is usually represented by an object diagram. It plays the role of the concrete example to be abstracted.
    3、 使用应用的协作图来选择可以被该应用使用的模式。使用每个模式的角色图,在应用对象图中把角色从角色图中分配给对象。最后,每个对象都被赋予几个来自几个模式的角色。
    4、 使用带有注解过的角色的对象图,设计者创建一个角色关系矩阵。The role relationship matrix is used to analyze how roles are close to each other in terms of the composition constraints. The purpose of this analysis is to discover the pattern interaction synergy and unleash any composite roles. As a result, role equivalent sets that form composite roles are defined. The role relationship matrix is reduced to a final role relationship matrix.
    5、 最终的角色关系矩阵被用来为组合设计模式创建角色图(the role diagram for the composite design pattern.)。

    之所以介绍POAD给大家,是因为总是看到各位讨论某个具体的设计模式,而对组合多个设计模式以构建优良架构的系统则较少论及。以后的随笔中将进一步和各位讨论POAD。

    模式(分析模式、架构模式和设计模式)是我们广泛讨论的一个话题,研究它是为了能提高软件复用(代码复用和设计复用)的水平。模式的发展和OO 语言的发展、OOAD方法论的发展以及UML的发展都密切相关。

    在20世纪60~70年代,面向对象语言初步发展的时期,Alan Kay(Smalltalk的发明人)提出了object-oriented programming,但是OOAD理论还没有正式被提出来。直到1982年Grady Booch发表了OOAD发展史上里程碑式的一篇论文《Object-Oriented Design》。在20世纪80年代,OOAD的先驱者纷纷提出其OOAD idea,比较著名的有Kent Beck, Peter Coad,Don Firesmith,Ivar Jacobson (a UML founder),Steve Mellor,Bertrand Meyer, Jim Rumbaugh (a UML founder),Rebecca Wirfs-Brock等。

    在过去的二十多年里,几种面向对象的分析和设计(OOAD)的方法论被提出来。这些方法论在几个方面有所不同。它们处理域空间(domain space)和创建分析设计模型的方式不同;它们创建的用来捕捉分析设计过程的输出的模型的类型也不同。在这些技术中,比较有名的是:

    1. Shlaer and Mellor (1988) 方法。
    2. Coad and Yourdon (1990) 方法。
    3. Wirfs-Brock、 Wilkerson、 Wiener (1990) 方法。
    4. Jacobson’s Objectory方法。
    5. Booch (1994)方法。
    6. Rumbaugh (1992) 方法。
    7. Hierarchical Object-oriented Design (HOOD) 方法。
    8. Real-Time Object-oriented Modeling language方法。
    9. Catalysis(1998)方法。

    一门设计方法论(design methodology),一般来说包括三个方面:

    1、 Technology aspects(技术方面)。包括概念、符号和模型。可视化的模型表达了设计者解决问题的思想(模式)。
    2、 Process aspects(过程方面)。包括任务和步骤。
    3、 Organizational aspects(组织方面)。企业如何组织,以将方法论行之有效。

    上面的这些理论从提出到现在都有10多年了,在它们的发展过程中,UML集各家所长,最后成为主流的建模语言,而模式也逐渐成为一个热门的研究课题。但是 大多数关于设计模式的书籍著述大多都是介绍和记录设计模式的,而很少有论及如何在开发新的应用时系统地应用这些可复用的设计。

    如何科学地使用模式以提高软件复用的水平?如何将多个模式科学地组合起来使用?如何系统地使用模式?为了解决这些问题,又有新的方法论被提出来,这就是 POAD——Pattern-Oriented Analysis and Design(面向模式的分析和设计),相信已经有人对此有了研究,在下篇随笔中,我也将把学习POAD的一些学习笔记贴出来和各位交流。

分享到:
评论

相关推荐

    设计模式的杰作:深入设计模式

    ### 设计模式的杰作:深入设计模式 #### 概述 《深入设计模式》是一部由亚历山大·什韦茨所著、彭力翻译的作品,旨在通过深入浅出的方式介绍设计模式的相关内容。该书不仅包含了面向对象程序设计的基础知识,还...

    JavaScript设计模式.pdf

    JavaScript设计模式.pdf JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体...

    深入浅出设计模式(中文版)

    代码中的注释详细解释了每一步的目的和作用,有助于读者快速掌握设计模式的实质。同时,书中的例子往往选取了实际开发中可能遇到的问题,使得学习过程更具实战性。 设计模式的应用不仅仅局限于Java,它们是面向对象...

    设计模式教材pdf 中文版

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的优秀实践和可重用解决方案。《设计模式教材pdf 中文版》是一本针对C++程序员的专业资料,旨在帮助他们理解和应用设计模式来提升代码质量和可...

    C#设计模式PDF 电子书

    设计模式是软件工程中经过实践验证的、解决常见问题的有效方法,对于提升代码质量、可维护性和复用性具有重要作用。 一、单例模式(Singleton) 单例模式确保一个类只有一个实例,并提供一个全局访问点。在C#中,...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    Gof设计模式设计模式设计模式PDF

    《Gof设计模式设计模式设计模式PDF》是一个深入学习设计模式的重要资源,包含了全面而详尽的设计模式理论和实践知识。设计模式是软件工程中的一种最佳实践,它为解决常见问题提供了一种可复用的解决方案,使得代码...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    java设计模式pdf

    ### Java设计模式详解 #### 一、背景与概念 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计...

    设计模式23种类图

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是经验丰富的开发者们在解决相似问题时积累的智慧结晶,通过标准化的解决方案,它们可以帮助我们写出更可维护、可扩展和可复用的...

    设计模式实例源码

    这个压缩包文件名为“23种设计模式示例源码”,暗示其中包含了解决23种经典设计模式的具体实现代码,这对于初学者或者希望深入理解设计模式的开发者来说是一份宝贵的资源。下面将对这23种设计模式进行详细解释。 1....

    《Java设计模式》课后答案-刘伟.rar

    在Java开发中,掌握设计模式对于提升编程技能和解决复杂问题具有关键作用。 本书涵盖了23种经典的GOF(GoF,Gang of Four)设计模式,包括创建型、结构型和行为型三大类。创建型设计模式如单例(Singleton)、工厂...

    JAVA设计模式(java设计)

    Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种在特定情境下为了解决常见问题而制定的通用解决方案的描述。它们描述了...

    Head First设计模式(完整高清版).pdf

    《Head First设计模式》是一本深受开发者喜爱的经典书籍,它以独特且易于理解的方式介绍了设计模式这一复杂的概念。设计模式是软件开发中的经验总结,是解决常见问题的有效模板,可以帮助我们编写更灵活、可维护和可...

    C++设计模式-好书

    ### C++设计模式精解 #### 一、引言 设计模式是软件工程领域中一个非常重要的话题,它为解决常见的软件设计问题提供了标准化的方法。本书《C++设计模式》聚焦于GoF(Gang of Four)所提出的23种设计模式,并通过...

    《设计模式》中文版

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。设计模式并非具体的代码或库,而是一种通用解决方案的描述,可以在多种编程语言中复用。《设计模式》中文版是一本针对Java程序员...

    23种JAVA设计模式和15种J2EE设计模式

    ### 23种JAVA设计模式和15种J2EE设计模式详解 #### 一、JAVA设计模式概览 在软件工程领域,设计模式是一种在特定情境下解决常见问题的有效方法。Java作为一种广泛使用的编程语言,拥有丰富的设计模式库来帮助...

    设计模式——原版的设计模式

    设计模式是一种在软件设计中被广泛认可的解决特定问题、经过良好记录并可重用的解决方案。它们代表了在各种编程环境中反复出现的问题的最佳实践。原版的设计模式通常指的是最初由“Gang of Four”(GoF)在他们的...

    设计模式 23种设计模式PPT

    设计模式是软件开发中一种广泛采用的实践,它代表了在特定上下文中解决常见问题的通用解决方案。设计模式并非具体的代码或库,而是对最佳实践的描述,它们是经过时间验证、可重用的代码设计模式,旨在提高代码的...

Global site tag (gtag.js) - Google Analytics