为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

[计算机]设计模式四人帮版翻译

2017-09-01 6页 doc 19KB 42阅读

用户头像

is_037433

暂无简介

举报
[计算机]设计模式四人帮版翻译[计算机]设计模式四人帮版翻译 介绍 面向对象软件的设计是困难的,而可重用的面向对象软件的设计则更难。首先必须找出目标对象,按照合适的粒度规入类,并为类定义接口和层次,及在类之间建立合适的关系。设计必须能解决当前的问题,而且要有一定的通用性以满足未来的需求,尽量的避免重新设计。有经验的设计人员将告诉你,在最先的设计中没有良好定义的情况下,要得到一个可重用的灵活的设计是多么的困难。 富有经验的设计人员能做出好的设计,然而新手在可能的选择中犹豫不决,并常常导致采用他们以前用过的非对象技术。新手们要花很长的时间才能学会好的对象...
[计算机]设计模式四人帮版翻译
[计算机]设计模式四人帮版翻译 介绍 面向对象软件的设计是困难的,而可重用的面向对象软件的设计则更难。首先必须找出目标对象,按照合适的粒度规入类,并为类定义接口和层次,及在类之间建立合适的关系。设计必须能解决当前的问,而且要有一定的通用性以满足未来的需求,尽量的避免重新设计。有经验的设计人员将告诉你,在最先的设计中没有良好定义的情况下,要得到一个可重用的灵活的设计是多么的困难。 富有经验的设计人员能做出好的设计,然而新手在可能的选择中犹豫不决,并常常导致采用他们以前用过的非对象技术。新手们要花很长的时间才能学会好的对象程序设计。显然,有经验的设计人员拥有新手们所不拥有的东西,是什么呢,, 专业设计人员所拥有的第一个优势是,不(必)用first原则来解决每一个问题,他们可以采用以前用过的解决。当发现一个好的解决方案时,他们一次又一次的使用它。这种经验也是使他们成为专家的原因之一。其结果是,你能够在很多面向对象系统中发现重复出现的类模式和通信对象,这些模式解决了某类特定的设计问题,并使得面向对象的设计变得更加灵活、优雅、最终可重用。熟悉这些模式的设计者可以立即将其应用到设计中而不需要重新发现它们。 象小说家和剧作家就常常任用老的模式如悲剧英雄、浪漫小说等等。同样的,设计者们也经常采用一定的模式如用对象表示状态、装饰对象以添加特征等等。一旦你掌握了设计模式,就能够自动的运用许多设计决策。 我们都知道设计经验的重要性。你是否有过这样的经历,在你设计的过程中碰到了一个似曾相识的问题,如是你搅尽脑汁去回忆是在什么情况下、在什么地方、用什么方法解决的。如果你能回忆起其细节,你就能够重用过去的经验来解决它。然而,我们对这种过去软件设计的经验并没有作出良好的以利其他人也能够重用它。 本书的目的就是记录在面向对象软件过程当中的经验,我们称之为设计模式。对每一种设计模式系统的命名、解释和评估,目标是来捕获人们能够有效应用的设计经验的具体形式。为了达到此目的,我们文档化了一些最重要的设计模式。 设计模式使得重用成功的设计和架构更为容易。其Expression Proven方法使得其在新系统中的应用更为容易。设计模式能够帮助你选择那些可重用的设计。通过对类、对象交互及其深层次意图的详细说明,设计模式甚至能提高现有系统的可维护性和文档质量。简言之,设计模式能帮助更快的作出正确的设计。 本书中并未给出新的或未证明的设计模式,这里的设计模式都是那些在不同的系统中多次应用的设计,而大多数这样的设计以前都没有文档化过。它们以前仅在面向对象研究团体中流传,或是成功的面向对象系统中的一些元素,这对于新手来说,每一种方式都不不易学习到。虽然这些设计方法都不是新的,我们以一种新的和可学习的方式来得到它们:作为具有一致格式的一类设计模式。 限于篇幅,本文仅给出专家所知的部分设计模式,不包括那些处理同步、分布式系统和实时系统中的设计模式,也不包括那些针对特定应用领域的设计模式;这里也并不会教你如何建立用户接口、如何写设备驱动、如何处理面向对象数据库。以上所说的领域具有自己独特的模式,值得将来有人为之分类编写。 什么是设计模式,, Christopher Alexander说过,每一种设计模式都是在讨论一类一次一次重复发生的问题,而规定对这类问题的解决方案的核心部分,。。。。。Alexander所说的模式是在建筑领域,但其对于面向对象设计模式同样适用。在我们的讨论环境中,不过是用对象和接口代替了墙和门窗,但两类设计模式的核心都是针对各自领域中的某类问题的解决方案。 通常,一个模式具有四个关键要素: 模式名(pattern name) 我们用其来规定一类设计问题、对该类问题的解决方案和结果。通过对模式命名扩大了设计词汇,容许我们在设计时采用更高一层的抽象,使得对设计的考虑和交流更为容易。对模式的好的命名是我们工作的难点之一。 问题(problem) 描述了何时使用模式。它解释了问题及其应用环境,可能是对特定设计问题的描述如如何用对象来表示算法,亦可能是对类和对象结构的描述如某种固定的设计中出现的类和对象的结构。有时,问题()也可以包括条件列表,。。。 解决方案(solution) 解决方案描述了很多基本元素,包括组成设计的元素、以及它们之间的关系、职责和协作。解决方案中不包括具体的设计和实现,因为模式必须应用于不同的环境。取而代之的是,模式提供对某类设计问题和怎样布置这些元素的抽象描述。 后果(consequences) 应用模式的结果和费用的评估。实际上,它是对模式的评估,软件的设计通常关心时间和空间的耗费,后果()也是选择语言和具体实现的依据之一。由于重用是面向对象的目的之一,模式的后果()也包括任用该模式在灵活性、可扩展性和轻便性方面的影响。列出后果()可帮助你更好的理解和评估一个模式。 个人观点影响着对某个设计是不是模式的判断,某人的模式可能只是另一个人的元构建块。本书中我们将模式浓缩为某一级别的抽象,本书的设计模式不包括诸如链表、哈希表一类的可在类中实现和编码的设计,也不包括那些复杂的、针对整个应用或子系统的设计。本书所说的模式是在某一环境中用来解决一种通用设计问题的,类和对象之间通信的描述。 设计模式的命名、抽象描述、以及其设计结构的核心因素的识别,都有助于可重用的面向对象设计。设计模式致力于识别参与的类和实例、它们的角色和协作关系、以及各自的职责。每一个设计模式关注着特定的面向对象设计问题。设计模式描述了何时应用、再有设计约束时能否应用、以及其应用的后果和费用的评估。由于我们必须最后实现设计,设计模式可以用C++,Smalltalk代码来演示。 编程语言的选择非常重要,因为它影响着我们的观点。我们的模式基于C++/Smalltalk语言,这种选择决定了某模式实现的难易。例如,如果我们选择过程语言,我们的设计模式中可能包括类似“继承”、“封装”、“多态”等模式。类似的,我们讨论的有些模式可能为某种语言所直接支持,例如,CLOS中有很多方法就实现了我们所讨论的Visitor模式。实际上,C++和Smalltalk也有很多不同之处,这意味着某个模式可能用某种语言实现起来比另外一种要容易。(例如Iterator模式) Smalltalk的MVC设计模式 MVC方式通常在Smalltalk中用于建立用户接口。通过对MVC中蕴藏的设计模式可以帮你理解我们所说的“模式”的含义。 MVC包括三类对象,Model是应用对象、View为其屏幕表示、Controller定义了对用户输入的处理(反应)方式。在应用MVC方式以前,通常将这三个对象的功能合到了一起,应用MVC分离了它们,为设计提供了灵活性和可重用性。 MVC通过在view和model之间建立Subscribe/Notify,分离了view和model对象。View对象必须保证它的表示反应了model对象的状态,当model对象的数据改变时,model对象(Notify)view对象,作为对这一行为的反应,每个view对象得到了一个做出更新的机会。这种方式使得可以将多个view对象为一个model对象提供不同的表示。你也可以为model对象建立新的view对象,而不用重新编写model。下图演示了一个model和三个view: 从表面看,这一例子反应了一个将view和model分离的设计。然而,这种设计适合一类更通用的问题:减少对象之间的藕和性,这样,当一个对象改变时,将不会影响到另外的对象,甚至不需要知道另外的对象的实现细节。这种更通用的模式将在Observer模式中来描述。 MVC方式的另一个特点是,view对象是可嵌套定义的。例如,button的控制板可由一个包含嵌套button view对象的复杂view对象来实现;对象观察器的用户接口可由能重用于调试器的嵌套view对象组成。MVC方式采用CompositeView类(View的子类)来支持嵌套view,其行为与view对象的行为一致,可用于view对象能使用的任何场合。 于是,我们又可以把这种对待composite view就像处理其一个组件的方式看成一种设计(方式)。同样的,这种设计可抽象出另一类更通用的问题(的解决方式):我们在某种情形下将对象分成组,并且处理一个组就像对待对象个体。这种方式我们用Composite设计模式来描述。它允许你建立类的层次,在这一层次下,有些子类定义原始对象(如Button),而其它的类可以定义合成对象(CompositeView),合成对象可将原始对象装配成更复杂的对象。 同样,MVC也可改变视图类(view)对用户反应的方式,而不用改变其可视化表示。你可能想改变其对键盘响应的方式,如,使用弹出菜单代替命令键。MVC将这种反应机制封装为控制对象(Controller)。控制器有一个类层次,易于实现从一个已存在的控制器建立出一个变种—一种新的控制器。 视图(view)对象通过某一控制器对象的实例(instance)来实现特定的响应策略。为了实现不同的策略,可以简单的使用不同的控制器实例来替换当前的实例。甚至可以在运行时来改变视图的控制器,以改变视图对象对用户输入的响应(策略)。例如,一个view对象可置为disabled,即对用户的输入不做任何响应。要达到这一目的,仅仅只需让控制器忽略所有input事件。 这种视图—控制器关系即是Strategy设计模式的一个典型例子。所谓Strategy即这样一个对象,它表示了一种算法。这在你想要替换算法(无论是静态替换还是动态替换)时特别有用,而这样的算法可能有许多的变量、或者拥有复杂的数据结构。 MVC中也使用了别的设计模式,例如,使用Factory Method模式来描述视图的默认控制器类;采用Decorator模式来为视图增加滚动条等。但在MVC中的主要模式是前述的Observer、Composite、和Strategy设计模式。
/
本文档为【[计算机]设计模式四人帮版翻译】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索