《理解设计模式》PPT课件.ppt

上传人:小飞机 文档编号:5552827 上传时间:2023-07-20 格式:PPT 页数:34 大小:339.99KB
返回 下载 相关 举报
《理解设计模式》PPT课件.ppt_第1页
第1页 / 共34页
《理解设计模式》PPT课件.ppt_第2页
第2页 / 共34页
《理解设计模式》PPT课件.ppt_第3页
第3页 / 共34页
《理解设计模式》PPT课件.ppt_第4页
第4页 / 共34页
《理解设计模式》PPT课件.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《《理解设计模式》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《理解设计模式》PPT课件.ppt(34页珍藏版)》请在三一办公上搜索。

1、第二十章 理解设计模式,已经学习了UML的基础知识以及如何将它运用到一个开发项目环境中,作为过渡,让我们来看看UML在一个热点领域设计模式中的应用。这一章主要有下列内容:参数化。设计模式。运用设计模式。使用自己的设计模式。设计模式的优点。,20.1 参数化,我们知道,类是创建对象的模板。对象是类的一个实例。我们回到哪个洗衣机的例子中去。详细指明洗衣机(washing machine)类(正确的表示法应该为WashingMachine类)具有bandName(品牌)、modelName(型号)、serialNumber(序列号)和capacity(容量)属性,以及addClothes()(添加衣

2、物)、addDetergent()(添加洗涤剂)及removeClothes()(取出衣物)操作后,这样就有了创建洗衣机类对象的模板。每次要创建一个对象,都要给这些属性指定具体的值。,UML可以让你更进一步。它提供了一种类似于创建新对象的创建类的机制。可以为某类的一个属性子集指定值从而生成一个具体的类,而不是类的对象。这种类被称为参数化类(parameterized class)。它的UML表示法如下图所示。类矩形框右上角挂着一个小的虚线框,框中是为了生成具体类所需要指定值的参数。为了记录的方便,这些参数被称为无界参数(unbound parameter)。当为这些参数指定值时,就说这些参数被

3、绑定到这些值上。右上角虚线柜中的“T”说明这个类是创建其他类的模板。,这里有一个例子。假设将LivingThing(生物)设置为参数化类。它的无界参数可以是genus(种)和species(属),它还具有生物通常都具有的属性如名称、高度、体重等,如下图所示。,如果将genus绑定到“homo(人类)”,species绑定到“sapiens(人)”,那么就生成了一个叫做“Human(人)”的类。类的名字被绑定到T。下图说明绑定关系的一种表示法。这种风格的表示法被称为显式绑定,因为它明确地显示出了生成的类和参数化类之间的依赖关系,并提供了生成的类的名字。,另一种绑定的表示法叫隐式绑定。不显示出依赖

4、关系,绑定参数出现在产生的类名后面,并用尖角括号括起来。如下图所示。,不论采用哪种表示法,都可以为name、height、和weight指定值来创建Human类的对象。,20.2 设计模式,可以将参数化的思想进一步扩展。任何UML分类都可以带参数(即参数化)。实际上一组互相协作的分类都可以被参数化,这就引出了一个令人感兴趣的研究领域。面向对象技术在近几十年得到的日益广泛的应用,对经常重复出现的类似问题,运用面向对象技术已经总结出许多健全的解决方案。这些解决方案,被称为设计模式(design pattenm),并且被获得广泛的应用。由于设计模式是面向对象技术领域的产物,因而它也具有容易形成概念,

5、容易被表示成图以及容易被重用的特点。UML是一种通用的面向对象建模语言,因此也可以用来解释和描述设计模式。设计模式实际上是一个设计问题的解决方案(一个模式)。它是在项目遇到具体的设计问题后被提出的,并且开发组发现所提出的问题解决方案在其他的语境中也同样适用。每个设计模式描述了一组相互通信的对象或者类。这组对象可以在具体的语境中用来解决一个设计问题。,使设计模式日益流行起来的第一本书名字就叫Design Pattern。在这本书中,分类整理了23个基本的设计模式。根据每个模式的用途这些设计模式被分为三类:(1)创建型模式(creational pattern)处理新对象的创建过程,(2)结构型模

6、式(structural pattern)处理对象和类的组成,(3)行为模式(behavioral pattern)详细说明对象或类之间如何交互以及如何分配职责给对象或类。他们还进一步根据设计模式是应用于对象还是类进行了划分,这种分类标推被称为范围(scope),大部分模式的范围都处于对象层次。,每个设计模式都有四个基本组成元素:(1)为了便于用文字描述而对模式所起的名称(name),(2)该模式所能解决的问题(problem),(3)说明如何解决问题以及模式中的对象或类之间如何协作的解决方案(solution),(4)运用模式所产生的后果(consequence)。可以用UML模型中的一个参

7、数化的协作表示个设计模式。由于设计模式是一种通用的问题解决方案,因此参数化的协作也起一个通用的名称。给模式指定特定于领域的名称可以使该模式应用于一个具体的模型。参数化的协作可以帮助你在模式的语境中可视化地表达出具体问题领域的解决方案。,20.3 职责链模式,下面就让我们来考察一个设计模式,加深理解前面对设计模式所做的介绍。职责链(Chain of Responsibility)是一种可应用于许多具体领域的行为模式。这个模式处理一组对象和一个请求之间的关系。当一个请求可以被多个对象处理时就可以运用这个模式。最初发出请求的对象并不知道它所发出的请求是被哪个对象处理的。最终处理请求的对象被称为隐含接

8、收者。餐馆就是按照这种模式组织的,汽车代理商购买,汽车也是按照这种方式。在一个餐馆中,顾客通常并不直接向某个厨师发送请求并且顾客通常也不熟悉厨师。相反,顾客首先发给服务员一份定单,服务员将定单交给厨师,这个厨师可能履行定单上所提出的要求或者将定单转发给助理厨师。在汽车代理商购买汽车时,购买者要向好几个金融机构提交贷款请求直到某个机构决定提供贷款。美国职业篮球联盟中的职业球队选秀也是按照这种模式实施的。成绩最差的球队最先选秀(选队员)。如果该球队决定放弃某个队员,那么成绩次差的队就可以选择这个队员入队,以此次序进行。放弃了队员的球队并不能马上知道哪个队后来选中了该队员。,现在已经在几个具体的语境

9、中看到了职责链模式的应用。接着就可以抽象地理解它了。这个模式中的参与者包括一个Client(客户)类、一个抽象的Handler(处理者)类以及几个抽象Handler类的子类。请求由客户对象发起。如果一个具体的处理者对象能够处理这个请求,那么就处理它。如果该处理者对象不能处理这个请求,则将这个请求转发给职责链上的下一个具体的处理者对象。下图说明了这种模式的结构。,这个模式背后隐藏的思想是使一个对象不必知道哪个对象满足了它发出的请求。在为对象分配职责时,这个模式给设计增加了灵活性。这个模式的缺点是它没有保证一定有某个对象处理请求。例如,一名球员可能不会受到来自职业联盟中的任何球队的邀请。注意图中抽

10、象Handler类的自身关联。这样设计的目的是要表明具体的Handler类实施了抽象的Handler类(在这种语境中,一个对象能够根据自身信息找它的后继对象)。可以将这种实施关系用如下图中的一个关联类来表示,这样的设计允许对后继者类增加属性。,20.3.1 职责链模式:餐馆领域 在餐馆领域中,抽象的处理者类是Emplyee(雇员)类,具体的处理者类包括Server(服务员)类、Chef(厨师)类、利assistantChef(助理厨师)类。客户类是Customer(顾客)类,由他发起一个请求,例如签一份定单,并且他并不知道谁将最终处理他的定单请求。将上图中的类名替换为具体领域中的类名,就得到了

11、下图。,上图虽然很有用,但是它并没有说明特定领域的类名如何对应到模式中的类名。要显示出这种语境,可以使用如下图所示的参数化协作表示法。,在上图中,引出虚线的椭圆代表了设计模式中的协作,椭圆中的名字就是模式的名称。模式外围的矩形框代表了协作的参与者对象。带箭头的依赖关系线表示合作要依赖于参与协作的对象。依赖关系线上的标签说明被依赖的参与协作的对象在模式中所担当的角色。协作的参数化是通过在模式中使用特定领域的类名来表达的。20.3.2 职责链模式:Web浏览器事件模型 在开发交互式Web页面时,设计者必须要考虑浏览器刚刚被打开时的事件模型。对于IE,可以编写JavaScript或者VBScript

12、代码来响应诸如鼠标点击这样,的事件。这段代码被称为一个“事件处理器”,它说明了如果有用户鼠标点击事件发生后,Web页面如何做出响应。在一个HTML文档(document)中,一个页面被分为一些被称作DIV的区域,每个DIV还被被进步分为几个表单(form)。可以将一个按钮(button)放置在一个表单中。这听起来有点象组成关系。确实是这样。上面划分的每个元素都是HTML文档的构件,某些构件还可以成为其他构件的构件。在Design Pattern一书中的模式中也包括组成模式(Composite Pattern),并说明了组成模式通常要和职责链模式共同使用。构件-组成关系实施了职责链中前驱与后继之

13、间的链接。,当在一个DIV中的某个表单中安放一个按钮,并且DIV所在的HTML文档被用IE打开时,按下按钮就触发了按钮点击事件,这个事件消息先被发送给表单对象,接着被发送给表单对象所在的DIV对象,最后被发送给DIV所在的文档对象。这些可能接收消息的每个文档元素对象都有自己的事件处理器来响应按钮点击事件。如果一个HTML文档中的脚本程序动态地指明了哪个元素对象的事件处理器被触发执行,那么这段脚本程序就被称为是职责链设计模式的一个实例。下图显示了事件模型中的类图以及用参数化协作表示应用于IE事件模型的设计模式。,20.4 我们自己的设计模式,Design Pattern一书总结了23个设计模式,

14、但是这不意味着只有这些模式。相反他们的意图是鼓励人们去彻底地发现和使用模式。为了简要说明这些模式是如何得来的,让我们回顾“活动图”一章。在那一章介绍了一个计算Fibnacci数的例子。这个问题的解决方案有什么特征呢?为了解决这个问题,要设置一个初始值或者一组中间值,还要按照一定的规则来累加中间值,最后整个算法以得到,数列中的第n个数而终止。我们可以把上述模式称为“数列计算器(Series Calculator)”模式。尽管可以只使用一个对象就可以实施这种模式,为了说明设计模式中的一些概念让我们用一组对象之间的协作来实施这个模式。数列计算器模式有三个参与者类,分别是InitialValue(初始

15、值)类、AccumulationRule(累加规则)类和FinalValue(终值)类。下图是这个模式的类图。开始值用属性first来表示。如果第2个开始值有必要的话,例如在计算Fibnacci数时,它用second属性来表示。有时,例如在计算阶乘时,这个模式需要一个,zeroth(第0项)。累加规则的算法由AccumulationRule类中的accumulate()操作实现。要计算的项的数目用AccumulationRule类中的属性nth表示。,在对象之间的协作中,AccumulationRule对象从InitialValue对象处获得开始值,计算所需要次数的累加和,并将结果发送给Fin

16、alValue对象,由FinalValue对象负责将结果输出。下图说明了这个交互过程。,为了相互比较,现将计算阶乘的参数化协作也用下图表示出来。,20.5 使用设计模式的好处,设计模式在许多不同的方面都很有用途。首先,它可以增进重用。如果将一个健全的设计用设计模式来表达,那么这些模式就很容易在日后被你或他人重新使用。另外,设计模式可以提供清晰、简洁的方式用来思考和讨论如何用一组相互协作的类或者对象解决问题。最后,如果在设计过程中运用了模式,会使文档的编制更容易。,20.6 小结,参数化的类(带参数的类)具有无界参数。用值对这些参数绑定可以创建新类。UML中的任何分类都可以被参数化或带参数。一个

17、参数化的协作可以用来表示设计模式在许多领域中都适用的解决方案。“职责链”是设计模式中的一个。在这模式中,对象发送的请求被沿着由对象组成的职责链逐个向后传递,直至遇到一个能处理该请求的对象为止。这个模式是来自本最著名的介绍设计模式的著作。可以创建我们自己的设计模式,例如,可以,创建一个用来计算一个数列中第n个数的数列计算器设计模式。这个模式的参与者有InitialValue(初始值)、AccumulationRule(累加规则)以及FinaIValue(终值)等类。使用设计模式具有很多优点。可以让设计者容易地重用已经被证明过的问题解方案,在设计中引入好的设计思想,并可以使文档的编制更加简化和清晰。“发现”新的设计模式更多地是源于经验的总结。在分析员和设计者的职业生涯中,他们可能会发现一些有规律的事物。在发现了这些规律后,就该考虑如何表示出这些规律。研究表明某个特定领域的专家在,处理他们所遇到的问题时最常使用设计模式。作业:1.什么是设计模式?2Navigator的消息传递顺序刚好和IE相反,即从高层到低层。在Navigator中事件消息首先是被文档对象接收,然后向它的元素对象传递,直到遇到最初发起这个事件消息的元素对象。最初发起事件消息的对象可能处于HTML文档中比较深的嵌套层次。假设这个嵌套层次是文档DIVFormButton,画出Navigator的事件职责链模式。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号