美文网首页
设计模式

设计模式

作者: 老虎_7f5f | 来源:发表于2018-09-13 23:48 被阅读4次

    一、引言
    设计面向对象的软件比较困难,而设计出可复用的面向对象的软件就更加困难了。你必须找到相关的对象,以适当的粒度将他们归类,再定义类的接口和类的层次,建立对象之间的基本关系。你的设计应该对你手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性,你也希望避免重复设计或尽可能的减少重复设计。有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计,即使不是不可能的只要也是非常困难的。一个设计在最终完成之前常要被复用好几次,而且每一次都有所修改。
    有经验的面向对象设计者的确能做出良好的设计,而新手则面对众多选择无从下手,总是求助于以前使用过的非面向对象技术。新手需要花费较长时间领会良好的面向对象设计是怎么回事。有经验的设计者显然知道一些新手所不知道的东西,这又是些什么呢?
    内行的设计者知道:不是解决任何问题都要从头做起,他们更愿意复用以前使用过的解决方案。当找到一个好的解决方案,他们会一遍又一遍地使用。这些经验是他们成为内行的部分原因。因此,你会在许多面向对象系统中看到类和相互通信的对象的重睹模式。这些模式解决特定的设计问题,使面向对象设计更灵活,优雅,最终复用性更好。他们帮助设计者将新的设计建立在以前的工作基础上,复用以往成功的设计方案。一个熟悉这些模式的设计者不需要再去发现它们,而能够立即将它们应用于设计问题中。
    我们都知道设计经验有多么的重要,你曾经多少次有过这种感觉----你已经解决过了一个问题就是不能确切知道是在什么地方或怎么解决的?如果你能记得以前的细节和怎么解决它的,你就可以复用以前的经验而不需要重新发现它,然而 ,我们并没有更好的记录下可供他人使用的软件设计经验。

    这本书的目的就是将面向对象软件的设计经验作为设计模式记录下来。每一个设计模式系统地命名。解释和评价了面向对象系统中一个重要的和重复出现的设计。我们的目标是将设计经验以人们能够有效利用的形式记录下来。
    设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已经证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式帮助你做出有利于系统复用的选择,避免设计损害了系统复用性。通过提供一个显示类和对象作用关系以及它们之间潜在练习的说明规范,设计模式甚至能够提高已有系统的文档管理和系统维护啊的有效性。简而言之,设计模式可以帮助设计者更快更好的完成系统设计。
    

    综上所述,设计模式就是为了代码复用,使系统设计更加灵活,优雅。

    1.1 什么是设计模式
    “每一个设计模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样你就能一次一次使用该方案而不必做重复的劳动”
    设计模式的四要素:
    1. 模式名称(pattern name) 一个助记名,它用一两个词来描述模式的问题、解决方案和效果。
    2. 问题(problem) 描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
    3. 解决方案(solution) 描述了设计的组成成分,它们之间的相互关系以及各自的职责和协作方式。因为模式就像是一个模版,可用于多种不同的场合,所以解决方案并不描述一个特定的设计或实现,而是提供设计问题的抽象和怎样用一个具有一般意义的元素组合来解决这个问题
    4.效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要的意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现的问题。因为复用是面向对象设计的要素之一,所以模式效果包含 它对系统的灵活性,扩充性或可移植性的影响,显示地列出这些效果对理解和评价这些模式很有帮助。

    1.2 描述设计模式
    我们用统一的格式描述设计模式,每一个模式根据以下模版分成若干部分,模版具有统一的信息描述结构,有助于你更容易地学习,比较和使用设计模式。

    模式名和分类
    模式名简洁地描述了模式的本质,一个好的名字非常重要,因为它将成为你设计词汇中的一部分
    意图
    是回答下列问题的简单概述,设计模式是做什么的?它的基本原理和意图是什么?它解决的是怎样的特定设计问题呢?
    别名
    模式的其他名字,
    动机
    用于说明一个设计问题以及如何用设计中的类,对象来解决该问题特定的背景。该情景会帮助你理解随后对模式更加抽象的描述
    适用性
    什么情况下可以使用该设计模式?该模式可用来改进那些不良设计?你怎样识别这些情况?
    结构
    采用基于对象建模技术的表示法对模式中的类进行图形描述。我们也使用了交互图来说明对象之间的请求序列和协作关系。
    参与者
    指设计模式中的类和/或对象以及它们各自的职责。
    协作
    模式的参与者怎样协助以实现它们的职责。
    效果
    模式怎样支持它的目标?使用模式的效果和所需做的权衡取舍?系统结构的那些方面可以独立改变
    实现
    实现模式时需要知道的一些提示、技术点以及应避免的缺陷,以及是否存在某些特定于实现语言的问题
    代码示例
    用于说明实现该模式的代码片段
    已知应用
    实际系统中发现的模式的例子。每个模式至少包括了两个不同领域的实例。
    相关模式
     与这个模式紧密关联的模式有哪些?其间重要的不同之处是什么?这个模式应和那些其他模式一起使用?

    相关文章

      网友评论

          本文标题:设计模式

          本文链接:https://www.haomeiwen.com/subject/fxoggftx.html