UML与设计模式.ppt
《UML与设计模式.ppt》由会员分享,可在线阅读,更多相关《UML与设计模式.ppt(37页珍藏版)》请在三一办公上搜索。
1、10.1,10.2,10.3,10.4,10.5,10.6,10.7,10.8,10.9,10.10,返回总目录,目,录,第 10 章 UML 与设计模式.2什么是模式.2为什么要使用设计模式.3模式的分类.4模式的组成元素.6模式的质量.7一个简单的模式例子 代理模式.8UML 对模式的支持.9应用设计模式进行系统设计.14模式选择举例 评估项目.15模式应用举例 形状编辑器.20,10.11,小,结.36,第 10 章,UML 与设计模式,过去几年 在面向对象领域中的一个重要突破就是提出了设计模式的概念 设计模式由于实用而受到欢迎 它们能够表达和重用专家技术和经验 能进行系统框架设计 在表
2、达上既经济又清楚 从而受到人们越来越多的重视模式概念是建筑师 Christopher Alexander 提出的 他提出可以把现实中一些已经实现的较好的建筑和房屋的设计经验作为模式 在以后的设计中直接加以运用 他还定义了一种 模式语言 来描述建筑和城市中成功的架构 Alexander 的方法得到软件业人士的青睐 在 20 世纪 90 年代掀起了一股在软件设计中应用模式的讨论 1994 年 8 月 召开了编程模式语言 Pattern Languages of Programs PLoP 大会 尽管软件的设计模式不一定要和面向对象有关 但由于面向对象很容易描述设计抽象 因而许多设计模式都和面向开发
3、有关 Erich Gamma Richard Helm Ralph Johnson 和 John Vlissides 四个人 被称为 四人组 在 1995 年初出版了一本书 Design Patterns:Elements of Reusable Object-OrientedSoftware(设计模式 可重用的面向对象软件的元素)其中对设计模式进行了基本分类并且讨论了一些新的需要研究的模式 不过 软件界的设计模式仍然处于起步阶段 远不如它在建筑业中那么成熟和完善对模式的研究有许多方面 例如 有的讨论如何在不同的领域内如 CORBA 和项目管理中应用模式 有的则讨论模式系统 希望能够识别出不同
4、级别的模式 最终形成一个完整的模式系统 还有的则研究组织系统的架构模式 子系统 责任和规则分配以及有关子系统如何通信和合作的准则 而 UML 的设计师们也正在研究如何用设计模式支持软件开发过程 同时 UML 本身就支持模式的表达在本章我们首先介绍模式的一些基本概念 如模式的定义 分类和它的优点 接着将介绍 UML 对设计模式的支持 最后 将通过几个具体的例子来讨论如何使用设计模式进行系统设计10.1 什么是模式那么 什么是模式 Pattern 呢 Alexander 给出的定义最为经典每个模式都描述了一个在我们的环境中不断出现的问题 然后描述了该问题的解决方案的核心 通过这种方式 你可以无数次
5、地使用那些已有的解决方案 无需再重复相同的工作模式作为现实世界中的一个元素 都是以下这三者之间的关系 它们是 特定的情景在该情景下反复出现的特定压力系统和使这些压力能够自我释放的空间配置作为语言的一个元素 模式是一条指令 说明了如何重复地使用这个空间配置 一旦给定的情景适当就释放给定的压力系统 简而言之 模式是一种出现在现实世界的事物同时 它也是一条告诉我们如何创建 何时创建该事物的规则 它既是一个过程 又是一种事物 既是对一个存在事物的描述 又是对生成该事物过程的描述,Bridge,模式具有双重性 它既是生成的 generative 又是描述的 descriptive 因为它既是对重复生成的
6、架构元素的描述 又是对如何以及何时创建该元素的规则 从本体论ontological 的观点来说 模式的 生成的 属性指模式的内容 content 即指反复出,现的事物的自身 从认识论 epistemological 的观点来说,描述的 属性指模式的形式,form 是我们捕捉并表述这一事物的方式 通过 问题 情况 压力 解决 的形式简而言之 设计模式的核心是问题描述和解决方案 问题描述说明模式的最佳使用场合以及它将如何解决问题 解决方案是用一组类和对象及其结构和动态协作来描述的10.2 为什么要使用设计模式在软件业中 设计模式是面向对象系统使用的一些可重用的已经得到了很好证明的巧妙 通用 简单的
7、设计解决方案 软件设计中的设计模式具有以下特性巧妙 设计模式是一些优雅的解决方案 一般很难立刻设计出来通用 设计模式通常不依赖某个特定的系统类型 程序设计语言或应用领域 它们是通用的得到了很好的证明 设计模式在实际系统和面向对象系统中得到广泛应用 它们并不仅仅停留在理论上简单 设计模式通常都非常小 只涉及很少一些类 为了构建更多更复杂的解决方案 可以把不同的设计模式与应用代码结合或混合起来使用可重用 设计模式的建档方式使它们非常易于使用 正如前面提到的 它们非常通用 因而可用于任何类型的系统 注意此处的可重用性是在设计层 而不是在代码层 设计模式平在类库中 只有系统架构使用它们面向对象 设计模
8、式是用最基本的面向对象机制如类 对象 通用化和多态等构造的那么 为什么要使用模式呢 首先 使用设计模式 就可以更准确地描述问题和它们,的解决方案 其次 使用设计模式可以具有一致性 consistency,即如果对一些已知的,问题我们有一类标准的解决方案 那么在遇到相同问题时 我们能够采取一致的方法 这就使代码更容易理解 使用设计模式的再一个原因就是 在遇到问题时 无需每次都从底,层做起 而是可以从标准解决方案,设计模式入手 并对它改编 使之适应特殊问题的,需要 这样就节省了时间 并且提高了开发的质量 模式为面向对象软件开发人员提供了以下机制根据实际系统的开发经验提供对共同问题的可重用的解决方案
9、提供类和对象级之上抽象的名称 通过设计模式 开发人员能够在更高的层次上讨论方案 例如 我建议我们可以用 Bridge 或 Adapter 来解决这个问题和 Adapter 是两种设计模式提供对开发的功能性和非功能性方面的处理方案 许多模式特别强调了某些面向对象设计擅长的领域 区分接口和实现 放松各部分之间的依赖性 隔离硬件和软件平台 并且具有重用设计和代码的潜能,提供了开发框架 framework 和工具的基础 在设计可重用框架时 设计模式是最基本的架构为面向编程和设计学习提供教育和训练支持 通过对设计模式的研究 能够深入理解良好设计的最基本性质 从而在后面的设计中加以模拟和应用10.3 模式
10、的分类不同的书籍和论文在描述设计模式时的方式各有差异 有的采用文本方式 有的采用文本和建模语言模型的方式 也有多种对模式的分类方法 四人组 书中定义了 23 种模式的分类 该书的文档风格现在成为定义新模式的模板 该书定义了以下几种模式分类创建模式 针对例程 包括创建什么对象 以及如何及何时创建 和类及对象的配置 允许系统中有不同结构和功能的 产品 对象 常见的创建模式有 AbstractFactory Factory Method Prototype Singleton Object Pool 图 10-1 是一个 Builder的例子,1:receive(msg:MIMEMsg),:Mess
11、ageManager,outMsg:OutboundMessageIF,new,1.2:send(),1.1:outMsg:=parse(msg:MIMEMsg)1.1.2:to(:String)1.1.3:from(:String)1.1.4:plainText(:String)1.1.5:jpegImage(:Image),builder:MAPIBuilder,1.1.6:outMsg:=getOutboundMsg(),:MIMEParser,1.1.1:builder:=getInstance(to:String)MessageBuilder,图 10-1,Builder 模式举例,
12、结构模式 针对在大的结构中使用类和对象的方式,并把接口与实现分离开来,1,1,),1,CacheManagerfetchObject(:ObjectKey,Cache-objects-for,CacheaddObject(:Object)fetchObject(:ObjectKey),1,cacher,1,Create-objects-for-cachingfetcherObjectCreatercreatObject(:ObjectKey),图 10-2,ObjectKeyCache Management 模式,Caches0.*Object,行为模式 针对在对象之间责任分配的算法 以及类和
13、对象之间的动态交互 行为模式不仅仅处理对象的结构 还处理它们之间的通信 Chain of ResponsibilityCommand Little Language/Interpreter Mediator Snapshot Observer State NullObject Strategy Template Method Visitor 图 10-3 是 Visitor 模式,1,Uses,0.*,ObjectStructure,1,Client,1,1,Uses,1,1,Uses,Uses,1,ConcreteVisitor1,ConcreteVisitor2,.,Contains,0.
14、*,Visitor#navigationOperation1():AbstactElement#navigationOperation2():AbstractElement.,navagates,AbstractElement,ConcreteElement1图 10-3 Visitor 模式,ConcreteElement2,.,格式,10.4 模式的组成元素Alexander 说 我们定义的每个模式 都应该以规则的形式 在情景 情景下产生的压力系统以及允许这种压力自我释放的配置之间建立关系 他还推荐使用图来描述模式Alexander 所使用的模式的描述格式称为 Alexandrian 方式
15、 在GoF中使用的称为 GoF不管模式的记录方式有多大的区别 它都应该包括一些本质的元素 以下是一些公认的模式基本元素名模式必须具有一个有意义的名 这样就可以用一个词或短语来指代该模式 以及它所描述的知识和结构 好的模式名组成讨论概念抽象的词汇表 有时 一种模式可能有多个公认的名字 这种情况下最好把它的绰号以及同义词在 别名 或 也作为 中列出 有的模式格式还提供模式的分类问题陈述问题并描述它的意图 它在给定的情景和压力下所要达到的目标和目的 通常压力是阻碍完成这些目的的情景,是问 题 以 及 它 的解 决 方 法 重 复发 生 的 前 置条 件,告 诉我 们 模 式 的 可应 用 性,app
16、licability 也可以把它看作应用模式前的系统初始配置压力描述有关的压力和约束 它们之间以及和要达到的目标之间是如何交互/冲突的 常,常使用一个具体的想法作为模式的动机 motivation,压力揭示了问题的错综复杂 同时,定义了在它们产生冲突时必须做的折衷 好的模式描述应该完全封装所有对它有影响的压力解决方案描述如何实现预期结果的静态关系和动态规则 相当于给出指令来构造所需要的产品 描述中可以有画 图和句子 它们指明模式的结构 参与人和他们之间的协作 进而说明问题是如何解决的 解决方案不仅要描述静态结构 还要描述动态行为 静态结构说明了模式的形式和组织 而行为动态则使模式变得生动 对模
17、式解决方案的描述可能指明了在尝试构造该方案的具体实现时应该记住的指南 有时也会描述该解决方案的一些变形或专有化例子一个或多个应用模式的例子显示 特定的初始情景 如何应用模式 模式如何改变情景 以及结果的情景 例子帮助读者理解模式的使用和可应用性 虚拟的例子和模拟尤其具有说服力 例子还可以附加一个实现例子 显示解决方案实现的一种方式结果情景在应用模式之后系统的状态或配置 包括应用模式所产生的结果 包括好的和坏的,以及模式可能带来的其它问题 它描述了模式的 后置条件 和 边际效应,这有时称,作压力的释放 因为它描述了哪个压力已经被释放 哪个还没有释放 现在哪个模式是可,应用的 为模式产生的最后情景
18、编制文档有助于把其它模式的初始情景关联起来 因为在大型项目中 一个模式通常只是完成整个任务的一小步,基本原理,对模式中的步骤和规则的证明性解释 告诉我们模式实际上的工作方式 以及为什么要采取这样的方式 为什么这样是最好的 模式的解决方案组件可能描述模式的外部可见的结构和行为 而基本原理组件则说明了模式内在的结构和主要的机制,相关模式,在同一模式语言或系统中 该模式与其它模式之间的静态和动态关系 相关模式通常会有相同的压力 并且会有与其它模式相容的初始或结果情景 这样的模式可能是前任模式 其应用导致该模式的应用 也可能是后继模式 其应用紧跟在该模式应用之后 可能是其它可选模式 针对与该模式相同的
19、问题 在不同的压力和约束下 提出不同的解决方案 还可能是互相关的模式 与该模式同时应用,已知使用,描述该模式在已有系统中的出现和应用 这有助于确认该模式的确是针对一个 重复出现的问题 的一个 得到证明的解决 模式的已知使用经常用作模式的使用指导虽然没有提出严格的要求 但通常好的模式前面都有一个摘要 提供一个简短的总结和概述 为模式描绘出一个清晰的图画 提供有关该模式能够解决问题的快速信息 有时这种描述称为模式的缩略概要 或一个模式缩略图 模式应该说明它的目标读者 以及对读者有哪些知识要求,10.5 模式的质量,除了包含上述的元素外 定义良好的模式还应该具有一些重要的质量 包括封装和抽象 每个模
20、式都封装了在特定领域内一个定义良好的问题以及它的解决方案 模式应该有清晰的边界概念 以便于明确问题空间和解决方案空间 模式还应该是抽象 体现了领域知识和经验 并且可能出现在该领域内不同的概念层次上,开放性和可变性 每个模式都应该是开放的 允许对它进行扩展或被其它模式参数化来共同解决大问题 模式的解决方案也应该能够有无限种实现的方式 孤立地或与其它任何模式一起,可再生性和可共存性 一旦被应用 那么每个模式都会生成一个结果情景 这个情景可能会与一个或多个其它模式的初始情景匹配 而后会继续应用后面的模式直到最终生成一个 完整的 解决方案 但模式的应用通常不是线性的 很可能一个模式的一部分会在特定的抽
21、象和精细层次上导致其它不同层次上的模式 或与它们复合,平衡 每个模式必须实现它的压力和约束之间的某种平衡 这种平衡可能来自用来使解决方案空间冲突最小化的一个或多个不变量和启发式 这种不变量通常代表了解决问题最基本的原则或思想 并解释了该模式中的每一个步骤 或规则,注意,总之,模式的目标是,通过把它的每一组成部分技巧性地组织起来,使它的整体和大,于部分和10.6 一个简单的模式例子 代理模式了解设计模式的最好办法就是去研究一个实际的模式 下面我们就以代理模式为例进行讨论代理模式是一个结构模式 把接口从实现中分离成不同的类 它的主要思想是用一个代理对象作为另一个真实对象的代理 由这个代理控制所有对
22、真实对象的接入 从而解决了当由于性质 位置或接入限制而使得真实对象无法被直接实例化的问题 这是一个非常简单的模式 但很容易说明 UML 是如何描述模式的 图 10-4 是 UML 中 Proxy 模式的类图,Client,SubjectRequest(),RealSubjectRequest(),ProxyRequest(),.,Request();,图 10-4,把 Proxy 设计模式描述成一个 UML 类图,Subject 是一个抽象类 因而是斜体,Proxy 模式涉及三个类 Subject RealSubject 和 Proxy 图中的 Client 类使用该模式使用抽象类 Subje
23、ct 中定义的接口 在 RealSubject 和 Proxy 中都实现了 Subject 定义的接口 RealSubject 实现了接口中的操作 而 Proxy 类则把它收到的所有调用都委托给RealSubject 去执行 由 Proxy 对象控制对 RealSubject 对象的接入 这一模式有以下几种应用场合更高的性能和效率 在需要真正的对象之间 系统可以用廉价的代理来减少耗费当在代理处调用操作时 它首先检查是否已经实例化 RealSubject 对象 如果没有就把它实例化并把请求委托给它 如果已经实例化了 则立即转发请求 这种方法在 RealSubject 对象的创建非常 昂贵 时很有
24、效 比如 必须读取数据库 复杂的初始化等 许多具有很长的启动时间的系统 通过使用 Proxy 模式可以显著地提高性能授权 如果需要检查调用方是否具有调用 RealSubject 对象的授权 则可以由 Proxy来完成 这时 调用方必须给出它自己的身份 Proxy 必须和某个授权对象通信是否允许接入,局部化 RealSubject 对象可以位于其它系统中 本地的 Proxy 只是在本系统中 扮演它的角色 而所有请求都被转发给其它系统 本地客户只看到 ProxyProxy 模式可以有许多种变形 如 完成其它功能无需全部委托给 RealSubject 可以改变参数的类型或操作的名词 或者做一些准备工
25、作来减少 RealSubject 的负荷 这些变形体现了模式背后的思想 模式是一种解决方案的核心 可以有多种变形 改装或扩展但不改变基本的方案在 四人组 的书中 是用类图描述模式的 用一个对象图和一个消息图 有点类似UML 中的序列图 很多地方是用文本来描述某些方面 如意图 动机 可应用性 结构协作 实现 举例的代码以及模式的结合 另外还包括同一模式其它的名字 有类似性质的相关模式以及已知的该模式的用法模式的代码通常都简单 根据需要把 RealSubject 实例化的 Proxy 类的 Java 代码很简单 如图 10-5 所示public class Proxy extends Object
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UML 设计 模式
链接地址:https://www.31ppt.com/p-2867839.html