uml与设计模式
uml建模与设计模式绘制流程图实训步骤及内容
uml建模与设计模式绘制流程图实训步骤及内容
UML(Unified Modeling Language)建模和设计模式绘制流程图的实训步骤及内容可以分为以下几个部分:
1. 确定需求:首先,明确需要建模和设计的系统或软件的需求。
了解系统的功能、特性和约束条件,明确需求背景和使用场景。
2. 选择适当的UML图:根据需求和实际情况,选择合适的UML图,例如用例图、类图、序列图、活动图等。
每个UML图都有不同的用途和表达能力,根据需求选择合适的图形。
3. 绘制用例图:根据需求,绘制用例图来描述系统的功能需求和角色之间的关系。
用例图是用来描述系统功能和用户之间的交互关系的图形。
4. 绘制类图:根据需求,绘制类图来描述系统中的类、属性和方法之间的关系。
类图是用来描述系统中静态结构的图形。
5. 绘制序列图:根据需求,绘制序列图来描述系统中对象之间的交互流程和时间顺序。
序列图是用来描述系统中动态行为的图形。
6. 绘制活动图:根据需求,绘制活动图来描述系统中的业务流程和操作步骤。
活动图是用来描述系统中流程的图形。
7. 应用设计模式:根据需求和问题的性质,应用合适的设计模式来解决问题。
设计模式是一种被广泛接受的、可重复使用的解决方案,可以提高系统的可维护性和扩展性。
8. 优化和评估:根据建模和设计结果,进行优化和评估。
检查模型的准确性和一致性,找出潜在的问题和改进空间。
在整个实训过程中,需要遵循良好的建模和设计规范,确保模型的清晰和可理解性。
并且在绘制流程图时,要注重细节的准确性,保证图形的易读性和可操作性。
软件工程的23种设计模式的UML类图.
二十三种设计模式0 引言谈到设计模式,绝对应该一起来说说重构。
重构给我们带来了什么?除了作为对遗留代码的改进的方法,另一大意义在于,可以让我们在写程序的时候可以不需事先考虑太多的代码组织问题,当然这其中也包括了应用模式的问题。
尽管大多数开发者都已经养成了写代码前先从设计开始的习惯,但是,这种程度的设计,涉及到到大局、到总体架构、到主要的模块划分我觉得就够了。
换句话说,这时就能写代码了。
这就得益于重构的思想了。
如果没有重构的思想,有希望获得非常高质量的代码,我们就不得不在开始写代码前考虑更多其实并非非常稳定的代码组织及设计模式的应用问题,那开发效率当然就大打折扣了。
在重构和设计模式的合理应用之下,我们可以相对较早的开始写代码,并在功能尽早实现的同时,不断地通过重构和模式来改善我们的代码质量。
所以,下面的章节中,在谈模式的同时,我也会谈谈关于常用的这些模式的重构成本的理解。
重构成本越高意味着,在遇到类似的问题情形的时候,我们更应该提前考虑应用对应的设计模式,而重构成本比较低则说明,类似的情形下,完全可以先怎么方便,怎么快怎么写,哪怕代码不是很优雅也没关系,回头再重构也很容易。
1 创建型1.1FactoryMethod思想:Factory Method的主要思想是使一个类的实例化延迟到其子类。
场景:典型的应用场景如:在某个系统开发的较早阶段,有某些类的实例化过程,实例化方式可能还不是很确定,或者实际实例化的对象(可能是需要对象的某个子类中的一个)不确定,或者比较容易变化。
此时,如果直接将实例化过程写在某个函数中,那么一般就是if-else或select-case代码。
如果,候选项的数目较少、类型基本确定,那么这样的if-else还是可以接受的,一旦情形变得复杂、不确定性增加,更甚至包含这个构造过程的函数所在的类包含几个甚至更多类似的函数时,这样的if-else代码就会变得比较不那么容易维护了。
此时,应用本模式,可以将这种复杂情形隔离开,即将这类不确定的对象的实例化过程延迟到子类。
软件工程中的UML建模和设计模式
软件工程中的UML建模和设计模式在软件工程领域中,UML(统一建模语言)建模和设计模式是两个重要的概念。
UML建模是一种用于描述、设计和分析软件系统的标准化语言,而设计模式则是一种被广泛应用的解决软件设计问题的经验总结和最佳实践。
UML建模是软件开发过程中必不可少的一环。
它提供了一种通用的语言和符号,使得开发团队能够更好地理解和沟通软件系统的结构和行为。
UML建模包括用例图、类图、时序图等多种图形表示方式,每种图形都有其特定的用途和表达能力。
通过使用UML建模,开发团队可以更好地理解用户需求,设计合理的软件架构,并将其转化为可执行的代码。
设计模式是一种被广泛应用的解决软件设计问题的经验总结和最佳实践。
它们是在实际开发中被证明有效的解决方案,可以帮助开发人员避免重复造轮子,提高代码的可维护性和可扩展性。
设计模式包括创建型模式、结构型模式和行为型模式三大类。
创建型模式用于创建对象,结构型模式用于描述对象之间的关系,行为型模式用于描述对象之间的交互和通信方式。
常见的设计模式有单例模式、工厂模式、观察者模式等。
UML建模和设计模式在软件工程中的应用是相辅相成的。
UML建模提供了一种描述和设计软件系统的通用语言,而设计模式则提供了一种解决软件设计问题的方法。
通过使用UML建模,开发团队可以更好地理解和沟通软件系统的结构和行为,而设计模式则可以帮助开发人员遵循一种经过验证的最佳实践,提高代码的质量和可维护性。
举个例子来说,假设我们正在开发一个电子商务网站。
通过使用UML建模,我们可以绘制用例图来描述用户和系统之间的交互,类图来描述系统中的各个类和它们之间的关系,时序图来描述用户操作和系统响应的时序关系。
这些图形可以帮助开发团队更好地理解用户需求,并将其转化为可执行的代码。
在设计阶段,我们可以运用设计模式来解决一些常见的软件设计问题。
比如,我们可以使用单例模式来确保系统中只有一个购物车实例,使用工厂模式来创建不同类型的商品对象,使用观察者模式来实现用户对商品的关注和通知功能。
交互图
6.1 顺序图
对象
控制焦点 消息
•图7-2 顺序图
生命线
6.1 顺序图
2.对象: 对象: 对象
顺序图中对象的符号和对象图中对象所用的符号一样。 顺序图中对象的符号和对象图中对象所用的符号一样。将对象置于顺序 图的顶部意味着在交互开始的时候对象就已经存在了, 图的顶部意味着在交互开始的时候对象就已经存在了,如果对象的位置 不在顶部,那么表示对象是在交互的过程中被创建的。 不在顶部,那么表示对象是在交互的过程中被创建的。
3.顺序图的组成元素 顺序图的组成元素
顺序图中的元素包括对象、生命线、控制焦点、消息。 顺序图中的元素包括对象、生命线、控制焦点、消息。消息表示了对象 间的通讯,生命线表示了对象的生存期, 间的通讯,生命线表示了对象的生存期, 控制焦点表示对象正在执行一 些活动。 些活动。
6.1 顺序图
6.1.2 顺序图的表示 UML中,表示一个顺序图,主要是标识系统中的对象、对象的 中 表示一个顺序图,主要是标识系统中的对象、 生命线、对象的控制焦点、对象间交互的消息。如图7-2所示 所示。 生命线、对象的控制焦点、对象间交互的消息。如图 所示。 1.顺序图的布局结构 顺序图的布局结构
UML和设计模式 和设计模式 UML and Design Patterns
丁华锋 dingh_f@
UML和设计模式 和设计模式 第六章 交互图
目录
6.1 顺序图 6.2 通信图 7 . 3 绘制交互图 6.4 顺序图与通信图的关系 6.5 定时图
第六章 交互图
描述系统中,对象之间通过消息进行通讯的图就是交互图。 描述系统中,对象之间通过消息进行通讯的图就是交互图。交 互图包含4种类型 它们是顺序图、通讯图、定时图、 种类型, 互图包含 种类型,它们是顺序图、通讯图、定时图、交互概述 图。
uml建模与设计模式课程介绍
一、课程概述在软件工程领域,UML建模和设计模式是两个非常重要的概念。
UML 建模是一种用于描述、设计和分析软件系统的标准化方法,它提供了一种统一的语言来描述系统的结构和行为。
设计模式则是一种解决特定问题的通用解决方案,它们描述了在特定情境下可重复使用的解决方案。
本课程旨在向学生介绍UML建模和设计模式的基本概念、原则和应用。
通过本课程的学习,学生将能够掌握UML建模和设计模式的基本理论知识,掌握这两个重要概念在软件开发中的应用技巧,提高软件设计和开发的能力。
二、课程目标1. 了解UML建模的基本原理和核心概念2. 掌握UML建模在软件系统设计中的应用技巧3. 掌握常见的设计模式及其在软件开发中的应用4. 能够运用UML建模和设计模式进行软件系统的分析、设计和开发三、课程大纲1. UML建模基础1.1 UML概念和分类1.2 UML建模的基本元素1.3 UML建模的基本原则和方法2. UML建模进阶2.1 UML时序图和用例图2.2 UML类图和对象图2.3 UML活动图和状态图3. 设计模式概述3.1 设计模式的定义和分类3.2 设计模式的原则和使用场景4. 创建型模式4.1 单例模式4.2 工厂模式4.3 建造者模式5. 结构型模式5.1 适配器模式5.2 装饰者模式5.3 组合模式6. 行为型模式6.1 观察者模式6.2 命令模式6.3 策略模式四、教学方法本课程采用以理论教学为主,辅以案例分析和实际操作的教学方法。
教师将通过讲解理论知识、分析实际案例以及演示操作,结合学生的课堂讨论和作业练习,使学生能够更好地理解和掌握课程内容。
五、课程评估1. 平时表现:占总成绩的20,包括课堂表现、作业情况等2. 期中考试:占总成绩的303. 期末考试:占总成绩的50六、适用对象本课程适用于计算机科学与技术、软件工程、信息安全等相关专业的本科生和研究生。
对于希望从事软件系统设计、开发和管理工作的学生来说,掌握UML建模和设计模式的基本知识和技能具有重要的意义。
03.设计模式.UML类图
UML(Unified Modeling Language,统一建模语言)。
武汉科技大学
UML简介
UML的诞生
1997年11月,在Ivar Jacoboson、Grady Booch以及James Rumbaugh的共同努力下,UML1.1版本提交给OMG (Object Management Group, 对象管理组织)并获得通 过,UML1.1成为业界标准的建模语言。
Ivar Jacobson博士曾任瑞典爱立信公司的首席软 件体系架构师,负责迄今为止商业上最为成功 的AXE交换机的研发。
Байду номын сангаас
Jacobson《面向对象软件工程》和《UML 语言 用户指南》等著作,已经成为殿堂级的软件经 典著作。
武汉科技大学
UML简介
UML的诞生
从1994年起,Grady Booch和James Rumbaugh在Rational 软件公司开始了UML的创建工作。 1995年,OOSE方法和Objectory方法的创建者Ivar Jacobson也加入其中。 UML三位创始人正式联手,共同为创建一种标准的建 模语言而一起工作,他们将开发出来的产品名称定为
UML简介
武汉科技大学
UML简介
UML“三剑客”
UML是面向对象领域的三位著名的方法学家 Grady Booch,James Rumbaugh(詹姆斯-朗博) 和Ivar Jacobson (伊万· 雅各布森)共同提出的。
Grady Booch
James Rumbaugh
都拥有有影响力的发言权。截至到2010-12-30,OMG拥
有379个会员组织。
武汉科技大学
UML分析模型与设计模型的关系与对比解析
UML分析模型与设计模型的关系与对比解析在软件开发领域,UML(统一建模语言)是一种常用的工具,用于描述、设计和分析软件系统。
在使用UML进行软件开发过程中,分析模型和设计模型是两个重要的概念,它们之间有着密切的关系。
本文将对UML分析模型和设计模型的关系进行解析,并进行对比分析。
一、UML分析模型的概念与作用UML分析模型是对问题领域进行描述和分析的模型。
它主要关注的是系统的需求、功能和行为等方面。
通过使用UML的各种图形和符号,可以对系统进行建模,从而更好地理解和分析系统的需求和功能。
UML分析模型的作用有以下几个方面:1. 系统需求分析:通过UML分析模型,可以对系统的需求进行详细的分析和描述,包括功能需求、性能需求等。
这有助于开发团队更好地理解和满足用户的需求。
2. 系统行为分析:UML分析模型可以描述系统的行为,包括用例图、活动图等。
通过这些图形,可以清晰地展示系统的各种行为,帮助开发团队更好地理解系统的运行流程。
3. 系统结构分析:UML分析模型可以描述系统的结构和组成部分,包括类图、对象图等。
通过这些图形,可以清晰地展示系统的各个组成部分之间的关系,有助于开发团队更好地设计和实现系统。
二、UML设计模型的概念与作用UML设计模型是对软件系统进行设计和实现的模型。
它主要关注的是系统的结构和实现细节等方面。
通过使用UML的各种图形和符号,可以对系统进行详细的设计和实现。
UML设计模型的作用有以下几个方面:1. 系统结构设计:通过UML设计模型,可以对系统的结构进行详细的设计,包括类的设计、接口的设计等。
这有助于开发团队更好地组织和管理系统的各个组成部分。
2. 系统行为设计:UML设计模型可以描述系统的行为,包括状态图、序列图等。
通过这些图形,可以清晰地展示系统的各种行为,有助于开发团队更好地设计和实现系统的功能。
3. 系统实现细节设计:UML设计模型可以描述系统的实现细节,包括类的属性和方法等。
2.设计模式常用的UML图分析(用例图、类图与时序图)
2.设计模式常⽤的UML图分析(⽤例图、类图与时序图)1-⽤例图概述1. 展现了⼀组⽤例、参与者以及他们之间的关系。
2. ⽤例图从⽤户⾓度描述系统的静态使⽤情况,⽤于建⽴需求模型。
⽤例特征保证⽤例能够正确捕捉功能性需求,判断⽤例是否准确的依据。
1. ⽤例是动宾短语2. ⽤例是相互独⽴的3. ⽤例是由⽤户参与者启动的4. ⽤例要有可观测的执⾏结果5. ⼀个⽤例是⼀个单元参与者 ActorUML中,参与者使⽤⼀个⼩⼈表⽰:1. 参与者为系统外部与系统直接交互的⼈或事务,于系统外部与系统发⽣交互作⽤2. 参与者是⾓⾊⽽不是具体的⼈3. 代表参与者在与系统打交道时所扮演的⾓⾊4. 系统实际运作中,⼀个实际⽤户可能对应系统的多个参与者。
不同⾓⾊也可以只对应⼀个参与者,从⽽代表同⼀参与者的不通实例⽤例 Use Case系统外部可见的⼀个系统功能单元。
系统的功能由系统单元所提供,并通过⼀系列系统单元与⼀个或多个参与者之间交换的消息所表达。
系统单元⽤椭圆表⽰,椭圆中的⽂字简述系统功能:关系 Relationship常见关系类型有关联、泛化、包含和扩展关联 Association表⽰参与者与⽤例之间的通信,任何⼀⽅都可发送或接受消息。
箭头指向:指向消息接收⽅:⼦系统 SubSystem⽤来展⽰系统的⼀部分功能(紧密联系)泛化 Inheritance继承关系,⼦⽤例和⽗⽤例相似,但表现出更特别的⾏为;⼦⽤例将继承⽗⽤例的所有结构、⾏为和关系。
⼦⽤例可以使⽤⽗⽤例的⼀段⾏为,也可以重载它。
⽗⽤例通常是抽象。
箭头指向:指向⽗⽤例2-类图描述系统中的类,以及各个类之间的关系的静态试图。
表⽰类、接⼝以及它们之间的协作关系,⽤于程序设计阶段。
注意:1. 抽象类或抽象⽅法⽤斜体表⽰2. 如果是接⼝,则在类名上⽅加 <<Interface>>3. 字段和⽅法返回值的数据类型⾮必需4. 静态类或静态⽅法加下划线类图实例:类图中的事务及解释如图,类图从上到下分为三部分,分别为类名、属性和操作1. 属性:如果有属性,则每⼀个属性都必须有⼀个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等2. 操作:如果有操作,则每⼀个操作也都有⼀个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等类图中的六种关系1.实现关系 implements (类实现接⼝)⽤空⼼三⾓虚线表⽰2.泛化关系 extends (表⽰⼀般与特殊的关系) is-a⽤空⼼三⾓实线表⽰3.组合关系 (整体与部分的关系) contains-a实⼼菱形实现表⽰eg.有头类、⾝体类与⼈类类三个类,则⼈类类中应包含头类及⾝体类这两个属性,则⼈类类与头类和⾝体的关系即为组合关系。
UML实验报告书实验3-设计模式
淮海工学院计算机工程学院实验报告书
课程名:《UML理论及实践》
题目:正向工程
班级:Z计121
学号:2014140093
姓名:薛慧君
一、目的与要求
1、熟悉面向对象原则,熟悉GoF中的模式;
2、会初步使用设计模式解决实际问题;
3、掌握正向工程、逆向工程概念;
4、掌握使用Rose画出类图、交互图等来描述设计模型;
5、掌握使用Rose从设计模型使用正向工程,得到代码框架;
6、掌握使用Rose从代码使用逆向工程,得到设计模型,并文档化Project。
二、实验内容或题目
假设有一CAD系统,可能需要绘制处理若干图形(如矩形、圆形、三角形……);而画图程序有若干版本,画图的工作需要依赖于具体的机器型号,新机器可以使用新的画图程序,旧的机器只能使用老版本的程序,请使用桥模式为本系统设计一个方案:请在Rational Rose中给出设计类图,并使用正向工程生成代码框架;在生成的代码中修改后再使用逆向工程,重新生成设计模型。
三、实验步骤及结果
CAD系统设计模型的类图;
四、结果分析与实验体会
通过本次实验,我掌握了:
(1)桥模式:将抽象部分与实现部分分离,使它们都可以独立的变化。
(2)桥模式适用性:①不希望在抽象和实现部分之间有一个固定的绑架关系②类的抽象以及实现都可以通过生成子类的方法加以扩充③对抽象的实现部分的修改应不会对客户产
生影响④对客户完全隐藏抽象的实现⑤有许多类要生成⑥在多个对象间共享实现,同时对客户隐藏这种实现机制
(3)桥模式实现要点:分别定义抽象的接口和实现的接口,抽象接口中聚合一个实现接口的引用,该引用就是连接接口和实现的桥梁。
7UML 设计模式(1)--Facade,Adapter模式
Gang-of-Four 书中介绍了23种基本的设计 模式(GOF23种设计模式)
UML和设计模式
3
7.1 设计模式概述
什么是设计模式? 广义上讲,是对被用来在特定场景下解决一般设计 问题的类和相互通信的对象的描述; 狭义的讲,是对特定问题的描述或解决方案。 设计模式的基本要素: 名称、问题、解决方案、模式效果。
UML和设计模式
17
适配器模式中的角色
目标(Target):即所期待得到的接口(不可是类) 被适配者(Adaptee):现有的接口,需要适配,否 则无法使用。 适配者(Adapter):将源接口转换为目标接口;是
具体的类,是本模式的核心。
UML和设计模式
18
7.4.2 对象适配器模式
UML和设计模式 24
// 客户程序中的使用
Target t= new Adapter(); t.Request();
UML和设计模式
25
Adapter模式与Facade模式
Facade模式 是否利用现有的类? 是否必须按某个接口来设计? 对象需要多态行为吗? 设计的接口是更简单的接口吗? 是 否 否 是 Adapter模式 是 是 可能 否
UML和设计模式
4
7.2 设计模式的分类
按照模式的目的划分:
创建型设计模式:描述如何创建对象,包括:抽象工 厂、建造、原型、单例等模式。 结构型设计模式:描述类和对象间怎样组织,如适配 器、桥接、组合、装饰、外观、享元、代理等模式。 行为型设计模式:描述算法及对象间的任务分配等, 如职责链、命令、迭代器、中介者、备忘录、观察者、 状态、策略、访问者等模式。
UML和设计模式 9
7.3.2 外观模式的例子
UML与软件设计模式思想在数据库设计中的应用
Ke wo d : M v rs U L; D s g a t r e i n P t e n: D t b s aa a e;S t u a t r e pP te n
O 引 言
元素的表示 图形和方法 【。 2 使用UL ] M进行软件 的分析与设计,
能够 加速软件 的开 发进程 , 提高代码质量 , 并且支持变动的 业务需求。
gen al at as de er d ab e vel men p ces and 11 tr op t ro s i us ate s u pat s et p ter p n roc ess an pr d oto typ es’ te ni e n at as de g w h ML. ch qu i d ab e si n it U r epe u at se
2 D p rm n f I fr a in E g n e i g L a y n ag T c nc lC le e in ug n 2 2 0 ) . e a t e t o n o m t o n i e r n , i n u g n e h i a o l g ,L a y n a g 2 0 6
郑广成 ’ 林 庆. 朱翠苗 ’ ’
Z e g G a g h n L n Qi g Z u C i i o h n u n c eg i n h u m a
(. 1江苏大学计算机科学与通信工程学院,镇江 22 1; 2连云港职业技术学院信息工程学院,连云港 220 ) 103 . 206
md o e’ s e j n, t i p p r i c s e a a a e s t u n o j c s p o o y e d s g h s a e d s u s s d t b s e p a d b e t r t t p s’ d s g h u h s u e i h e i n t o g t s d n t e
UML分析与设计
UML分析与设计1. UML(UNIFIED MODELING LANGUAGE)概述 (1)1.1UML是什么? (1)1.2UML的组成 (1)1.3UML的功能 (1)2. UML图(重点) (1)2.1用例图 (1)2.1.1 用例 (1)2.1.2 参与者(活动者) (1)2.1.3 用例图 (1)2.1.4 包含和扩展 (1)2.1.5 用例模型 (2)2.2类图 (2)2.2.1 类 (2)2.2.2 类之间的关系 (2)2.2.3 类图 (5)2.3对象图 (5)2.3.1 2004年5月下午试题试题三 (6)2.4功能复用及解题方法 (8)2.4.1 引用机制(聚合或组合) (8)2.4.2 继承机制(泛化的反关系)实现功能复用 (8)2.4.3 两者对比 (8)2.5顺序图(序列图) (9)2.5.1 2004年11月下午试题三(15分) (10)2.6协作图 (11)2.7状态图 (11)2.8活动图 (12)2.8.1 基本活动图 (12)2.8.2 带泳道的活动图 (12)2.9构件图 (13)2.10部署图 (14)2.11各种图总结 (14)3. 视图 (14)3.1用例视图 (14)3.2设计视图 (15)3.3过程视图 (15)3.4实现视图 (15)3.5配置视图 (15)1.UML(Unified Modeling Language)概述1.1 UML是什么?⏹UML是一种语言。
⏹UML只是一种可视化的语言。
⏹UML是一种可用于详细描述的语言。
⏹UML是一种构造语言。
⏹UML是一种文档化语言。
⏹UML是一种描述面向对象软件分析和设计结果的语言。
错误说法:UML是指导软件开发的思想。
1.2 UML的组成UML由模型元素、扩展机制、图及视图等部分组成,由模型元素或扩展机制构成图,由图构成视图。
1.3 UML的功能⏹为软件系统的产出建立可视化模型⏹规约软件系统的产出⏹构造软件系统的产出⏹为软件系统的产出建立文档2.UML图(重点)由模型元素和扩展机制构成。
UML设计模式之桥模式(Bridge Pattern)
package cn.pattern.bridge; public abstract class Components { public abstract void operate(); } package cn.pattern.bridge; public class FirstWindow extends Windows{ public FirstWindow(Components comp) { super(comp); } public void display(){ super.display(); System.out.println(" on the FirstWindow"); } }
Windows
FirstWindow
SecondWindow
Menu
Button
Menu
Button
同样地,这里有FirstWindow窗体类和SecondWindow窗体类,每个窗体下 都有一个菜单类Menu,当添加一个新的组件Button类时,每个窗体类中的 代码都需要较大地改动。
Windows
FirstWindow
SecondWindow
Menu
Button
Menu
Button
桥模式类图
桥模式类图
package cn.pattern.bridge; public abstract class Windows { protected Components comp; public Windows(Components comp){ p=comp; } public void display(){ comp.operate(); } } package cn.pattern.bridge; public class Button extends Components{ @Override public void operate() { System.out.print("the Button"); } } package cn.pattern.bridge; public class Menu extends Components{ @Override public void operate() { System.out.print("the Menu"); } }
【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)
【设计模式】第⼀篇:概述、耦合、UML、七⼤原则,详细分析总结(基于Java)迷茫了⼀周,⼀段时间重复的 CRUD ,着实让我有点烦闷,最近打算将这些技术栈系列的⽂章先暂时搁置⼀下,开启⼀个新的篇章《设计模式》,毕竟前⾯写了不少 “武功招式” 的⽂章,也该提升⼀下内功了⼀设计模式概述(⼀) 什么是设计模式设计模式,即Design Patterns,是指在软件设计中,被反复使⽤的⼀种代码设计经验。
使⽤设计模式的⽬的是为了可重⽤代码,提⾼代码的可扩展性和可维护性1995年,GoF(Gang of Four,四⼈组/四⼈帮)合作出版了《设计模式:可复⽤⾯向对象软件的基础》⼀书,收录了23种设计模式,从此树⽴了软件设计模式领域的⾥程碑,【GoF设计模式】(⼆) 为什么学习设计模式前⾯我们学习了 N 种不同的技术,但是归根结底,也只是 CRUD 与调⽤之间的堆砌,或许这个创意亦或是业务很完善、很强⼤,其中也巧妙运⽤了各种⾼效的算法,但是说⽩了,这也只是为了实现或者说解决某个问题⽽做的还有时候,两个⼈同时开发⼀款相同的产品,均满⾜了预期的需求,但是 A 的程序,不仅代码健壮性强,同时后期维护扩展更是便捷(这种感觉,我们会在后⾯具体的设计模式中愈发的感觉到)⽽ B 的代码却是⼀⾔难尽啊有⼀句话总结的⾮常好:设计模式的本质是⾯向对象设计原则的实际运⽤,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解也就是说,毕竟像例如Java这样⾯向对象的语⾔中,如何实现⼀个可维护,可维护的代码,那必然就是要降低代码耦合度,适当复⽤代码,⽽要实现这⼀切,就需要充分的利⽤ OOP 编程的特性和思想注:下⾯第⼆⼤点补充【耦合】的相关概念,若不需要跳转第三四⼤点【UML类图及类图间的关系】/【设计模式七⼤原则】在之前我写 Spring依赖注⼊的时候【万字长⽂】 Spring框架层层递进轻松⼊门(0C和D),就是从传统开发,讲到了如何通过⼯⼚模式,以及多例到单例的改进,来⼀步步实现解耦,有兴趣的朋友可以看⼀下哈⼆什么是耦合?(⾼/低)作为⼀篇新⼿都能看懂的⽂章,开始就⼀堆 IOC AOP等专业名词扔出去,好像是不太礼貌,我得把需要铺垫的知识给⼤家尽量说⼀说,如果对这块⽐较明⽩的⼤佬,直接略过就OK了耦合,就是模块间关联的程度,每个模块之间的联系越多,也就是其耦合性越强,那么独⽴性也就越差了,所以我们在软件设计中,应该尽量做到低耦合,⾼内聚⽣活中的例⼦:家⾥有⼀条串灯,上⾯有很多灯泡,如果灯坏了,你需要将整个灯带都换掉,这就是⾼耦合的表现,因为灯和灯带之间是紧密相连,不可分割的,但是如果灯泡可以随意拆卸,并不影响整个灯带,那么这就叫做低耦合代码中的例⼦:来看⼀个多态的调⽤,前提是 B 继承 A,引⽤了很多次A a = new B();a.method();如果你想要把B变成C,就需要修改所有new B()的地⽅为new C()这也就是⾼耦合如果如果使⽤我们今天要说的 spring框架就可以⼤⼤的降低耦合A a = BeanFactory().getBean(B名称);a.method();这个时候,我们只需要将B名称改为C,同时将配置⽂件中的B改为C就可以了常见的耦合有这些分类:(⼀) 内容耦合当⼀个模块直接修改或操作另⼀个模块的数据,或者直接转⼊另⼀个模块时,就发⽣了内容耦合。
UML设计模式ppt课件
前提条件
关联解法
解法
效果/优缺点/已知应 用
10
其他相关模式
设计模式的诞生与发展
• 软件模式
– 软件模式与具体的应用领域无关,在模式发现 过程中需要遵循大三律(Rule of Three),即只 有经过三个以上不同类型(或不同领域)的系 统的校验,一个解决方案才能从候选模式升格 为模式。
11
设计模式的诞生与发展
18
设计模式的定义与分类
• 设计模式的分类
– 根据范围,即模式主要是用于处理类之间关系 还是处理对象之间的关系,可分为类模式和对 象模式两种:
• 类模式处理类和子类之间的关系,这些关系通 过继承建立,在编译时刻就被确定下来,是属 于静态的。
• 对象模式处理对象间的关系,这些关系在运行 时刻变化,更具动态性。
23
设计模式的优点
• 设计模式是从许多优秀的软件系统中总结出的成功 的、能够实现可维护性复用的设计方案,使用这些方 案将避免我们做一些重复性的工作,而且可以设计出 高质量的软件系统。
• 设计模式的主要优点如下:
– 设计模式融合了众多专家的经验,并以一种标准的形 式供广大开发人员所用,它提供了一套通用的设计词 汇和一种通用的语言以方便开发人员之间沟通和交流, 使得设计方案更加通俗易懂。对于使用不同编程语言 的开发和设计人员可以通过设计模式来交流系统设计 方案,每一个模式都对应一个标准的解决方案,设计 模式可以降低开发人员理解系统的复杂度。
《UML与设计模式》教学大纲
《UML与设计模式》教学大纲课程编号:081323262课程名称:UML与设计模式英文名称:UML and Design Patterns课程类型:专业课课程要求:必修学时/学分:32/2 (讲课学时:28 实验学时:4)适用专业:计算机科学与技术一、课程性质与任务UML与设计模式是软件工程知识体系中的重要组成部分,是计算机科学与技术专业学生学习软件密集型系统模型化表示方法和经典设计理论的专业课,为学生建立从事软件系统分析及设计工作的理论基础和必要技能。
本课程以UML语言和面向对象设计技术为主要教学内容,系统介绍UML语言的应用领域、构成要素和建模方法,剖析面向对象的设计原则及其目的,并结合实际问题说明设计模式的使用场景、适用条件及程序实现方法。
使学生能够运用面向对象的观点准确识别及抽象表示复杂工程问题的本质特征,利用软件行业中标准化的概念模型表达问题空间和解决方案的逻辑结构及行为特性,遵从软件工程的指导思想和软件设计的基本原则合理选择、运用经典设计模式构建复杂工程问题的解决方案。
二、课程与其他课程的联系先修课程:面向对象程序设计、Java语言程序设计、软件工程。
后续课程:JavaEE高级框架应用与开发、智能交通-PC应用系统实训项目、移动应用开发项目实践等。
本课程依赖先修课程建立有关面向对象方法和软件工程的知识体系,使学生能够预先理解面向对象的基本理论、核心机制和特性,全面领会工程化软件开发的活动框架和过程组织模式,并具备运用面向对象语言(如C++或Java)设计计算机程序的实践能力。
大量后续课程的教学案例以及实际工程问题需要利用本课程所介绍的建模语言及设计模式进行技术原理和解决方案的分析及描述,对后续课程起重要支撑作用。
三、课程教学目标1. 了解UML语言的产生背景、构成要素及主要特点,能够合理解释技术发展和创新对经济、行业、社会尤其是软件工程的影响。
(支撑毕业能力要求6)2. 能够遵从UML语言的语法规则和公共机制,正确运用事物、关系及图表示软件密集型系统的静态结构和动态行为,并能甄别、选择恰当的工具对软件需求和设计方案进行文档化和详述。
UML的设计模式和UML建模
代理模式
代理模式是一种 设计模式,用于 控制对对象的访 问。
代理模式可以提 供对对象的访问 控制,例如,可 以限制对对象的 访问权限,或者 可以提供对对象 的访问日志记录。
代理模式可以提 供对对象的访问 优化,例如,可 以缓存对象的数 据,或者可以提 供对对象的访问 负载均衡。
代理模式可以提 供对对象的访问 扩展,例如,可 以提供对对象的 访问权限控制, 或者可以提供对 对象的访问日志 记录。
UML建模的常用工具
Rational Rose:IBM公司开 发的UML建模工具,支持多 种UML图
ArgoUML:开源的UML建模 工具,支持多种UML图
StarUML:开源的UML建模 工具,支持多种UML图
Enterprise Architect: Sparx Systems公司开发 的UML建模工具,支持多 种UML图
UML的设计模式和UML 建模
XX,a click to unlimited possibilities
汇报人:XX
目录
01 添 加 目 录 项 标 题 03 U M L 建 模 的 基 本 概 念
02 U M L 设 计 模 式 概 述 04 U M L 设 计 模 式 的 常 见 类 型
05 U M L 建 模 的 实 践 方 法 07 U M L 建 模 的 最 佳 实 践 和 未 来
Part Three
UML建模的基本概 念
UML建模的定义和目的
UML建模是一种图形化的建模语言,用于描述和设计软件系统
UML建模的目的是为了更好地理解和描述软件系统的结构和行为,提高软件开发的效 率和质量
UML建模可以帮助软件开发人员更好地理解和沟通软件系统的需求和设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
返回总目录目录第10章UML与设计模式 (2)10.1 什么是模式 (2)10.2 为什么要使用设计模式 (3)10.3 模式的分类 (4)10.4 模式的组成元素 (6)10.5 模式的质量 (7)10.6 一个简单的模式例子代理模式 (8)10.7 UML对模式的支持 (9)10.8 应用设计模式进行系统设计 (14)10.9 模式选择举例评估项目 (15)10.10 模式应用举例形状编辑器 (20)10.11 小结 (36)第10章 UML与设计模式过去几年在面向对象领域中的一个重要突破就是提出了设计模式的概念设计模式由于实用而受到欢迎它们能够表达和重用专家技术和经验能进行系统框架设计在表达上既经济又清楚从而受到人们越来越多的重视模式概念是建筑师Christopher Alexander提出的他提出可以把现实中一些已经实现的较好的建筑和房屋的设计经验作为模式在以后的设计中直接加以运用他还定义了一种模式语言来描述建筑和城市中成功的架构Alexander的方法得到软件业人士的青睐在20世纪90年代掀起了一股在软件设计中应用模式的讨论1994年8月召开了编程模式语言Pattern Languages of Programs PLoP大会尽管软件的设计模式不一定要和面向对象有关但由于面向对象很容易描述设计抽象因而许多设计模式都和面向开发有关Erich Gamma Richard Helm Ralph Johnson和John Vlissides四个人被称为四人组在1995年初出版了一本书Design Patterns: Elements of Reusable Object-Oriented Software(设计模式可重用的面向对象软件的元素)其中对设计模式进行了基本分类并且讨论了一些新的需要研究的模式不过软件界的设计模式仍然处于起步阶段远不如它在建筑业中那么成熟和完善对模式的研究有许多方面例如有的讨论如何在不同的领域内如CORBA和项目管理中应用模式有的则讨论模式系统希望能够识别出不同级别的模式最终形成一个完整的模式系统还有的则研究组织系统的架构模式子系统责任和规则分配以及有关子系统如何通信和合作的准则而UML的设计师们也正在研究如何用设计模式支持软件开发过程同时UML本身就支持模式的表达在本章我们首先介绍模式的一些基本概念如模式的定义分类和它的优点接着将介绍UML对设计模式的支持最后将通过几个具体的例子来讨论如何使用设计模式进行系统设计10.1 什么是模式那么什么是模式Pattern呢Alexander给出的定义最为经典每个模式都描述了一个在我们的环境中不断出现的问题然后描述了该问题的解决方案的核心通过这种方式你可以无数次地使用那些已有的解决方案无需再重复相同的工作模式作为现实世界中的一个元素都是以下这三者之间的关系它们是特定的情景在该情景下反复出现的特定压力系统和使这些压力能够自我释放的空间配置作为语言的一个元素模式是一条指令说明了如何重复地使用这个空间配置一旦给定的情景适当就释放给定的压力系统简而言之模式是一种出现在现实世界的事物同时它也是一条告诉我们如何创建何时创建该事物的规则它既是一个过程又是一种事物既是对一个存在事物的描述又是对生成该事物过程的描述模式具有双重性它既是生成的generative又是描述的descriptive因为它既是对重复生成的架构元素的描述又是对如何以及何时创建该元素的规则从本体论ontological的观点来说模式的生成的属性指模式的内容content即指反复出现的事物的自身从认识论epistemological的观点来说描述的属性指模式的形式form是我们捕捉并表述这一事物的方式通过问题情况压力解决的形式简而言之设计模式的核心是问题描述和解决方案问题描述说明模式的最佳使用场合以及它将如何解决问题解决方案是用一组类和对象及其结构和动态协作来描述的10.2 为什么要使用设计模式在软件业中设计模式是面向对象系统使用的一些可重用的已经得到了很好证明的巧妙通用简单的设计解决方案软件设计中的设计模式具有以下特性z巧妙设计模式是一些优雅的解决方案一般很难立刻设计出来z通用设计模式通常不依赖某个特定的系统类型程序设计语言或应用领域它们是通用的z得到了很好的证明设计模式在实际系统和面向对象系统中得到广泛应用它们并不仅仅停留在理论上z简单设计模式通常都非常小只涉及很少一些类为了构建更多更复杂的解决方案可以把不同的设计模式与应用代码结合或混合起来使用z可重用设计模式的建档方式使它们非常易于使用正如前面提到的它们非常通用因而可用于任何类型的系统注意此处的可重用性是在设计层而不是在代码层设计模式平在类库中只有系统架构使用它们z面向对象设计模式是用最基本的面向对象机制如类对象通用化和多态等构造的那么为什么要使用模式呢首先使用设计模式就可以更准确地描述问题和它们的解决方案其次使用设计模式可以具有一致性consistency即如果对一些已知的问题我们有一类标准的解决方案那么在遇到相同问题时我们能够采取一致的方法这就使代码更容易理解使用设计模式的再一个原因就是在遇到问题时无需每次都从底层做起而是可以从标准解决方案设计模式入手并对它改编使之适应特殊问题的需要这样就节省了时间并且提高了开发的质量模式为面向对象软件开发人员提供了以下机制z根据实际系统的开发经验提供对共同问题的可重用的解决方案z提供类和对象级之上抽象的名称通过设计模式开发人员能够在更高的层次上讨论方案例如我建议我们可以用Bridge或Adapter来解决这个问题 Bridge和Adapter是两种设计模式z提供对开发的功能性和非功能性方面的处理方案许多模式特别强调了某些面向对象设计擅长的领域区分接口和实现放松各部分之间的依赖性隔离硬件和软件平台并且具有重用设计和代码的潜能z 提供了开发框架framework 和工具的基础在设计可重用框架时设计模式是最基本的架构z 为面向编程和设计学习提供教育和训练支持通过对设计模式的研究能够深入理解良好设计的最基本性质从而在后面的设计中加以模拟和应用10.3 模式的分类不同的书籍和论文在描述设计模式时的方式各有差异有的采用文本方式有的采用文本和建模语言模型的方式也有多种对模式的分类方法四人组书中定义了23种模式的分类该书的文档风格现在成为定义新模式的模板该书定义了以下几种模式分类z 创建模式针对例程包括创建什么对象以及如何及何时创建和类及对象的配置允许系统中有不同结构和功能的产品对象常见的创建模式有Abstract Factory Factory Method Prototype Singleton Object Pool 图10-1是一个Builder 的例子图10-1 Builder 模式举例z 结构模式针对在大的结构中使用类和对象的方式并把接口与实现分离开来图10-2 CacheManagement 模式z 行为模式针对在对象之间责任分配的算法以及类和对象之间的动态交互行为模式不仅仅处理对象的结构还处理它们之间的通信Chain of ResponsibilityCommand Little Language/Interpreter Mediator Snapshot Observer State Null图10-3 Visitor 模式10.4 模式的组成元素Alexander说我们定义的每个模式都应该以规则的形式在情景情景下产生的压力系统以及允许这种压力自我释放的配置之间建立关系他还推荐使用图来描述模式Alexander所使用的模式的描述格式称为Alexandrian方式在[GoF]中使用的称为GoF 格式不管模式的记录方式有多大的区别它都应该包括一些本质的元素以下是一些公认的模式基本元素z名模式必须具有一个有意义的名这样就可以用一个词或短语来指代该模式以及它所描述的知识和结构好的模式名组成讨论概念抽象的词汇表有时一种模式可能有多个公认的名字这种情况下最好把它的绰号以及同义词在别名或也作为中列出有的模式格式还提供模式的分类z问题陈述问题并描述它的意图它在给定的情景和压力下所要达到的目标和目的通常压力是阻碍完成这些目的的z情景是问题以及它的解决方法重复发生的前置条件告诉我们模式的可应用性applicability也可以把它看作应用模式前的系统初始配置z压力描述有关的压力和约束它们之间以及和要达到的目标之间是如何交互/冲突的常常使用一个具体的想法作为模式的动机motivation压力揭示了问题的错综复杂同时定义了在它们产生冲突时必须做的折衷好的模式描述应该完全封装所有对它有影响的压力z解决方案描述如何实现预期结果的静态关系和动态规则相当于给出指令来构造所需要的产品描述中可以有画图和句子它们指明模式的结构参与人和他们之间的协作进而说明问题是如何解决的解决方案不仅要描述静态结构还要描述动态行为静态结构说明了模式的形式和组织而行为动态则使模式变得生动对模式解决方案的描述可能指明了在尝试构造该方案的具体实现时应该记住的指南有时也会描述该解决方案的一些变形或专有化z例子一个或多个应用模式的例子显示特定的初始情景如何应用模式模式如何改变情景以及结果的情景例子帮助读者理解模式的使用和可应用性虚拟的例子和模拟尤其具有说服力例子还可以附加一个实现例子显示解决方案实现的一种方式z结果情景在应用模式之后系统的状态或配置包括应用模式所产生的结果包括好的和坏的以及模式可能带来的其它问题它描述了模式的后置条件和边际效应这有时称作压力的释放因为它描述了哪个压力已经被释放哪个还没有释放现在哪个模式是可应用的为模式产生的最后情景编制文档有助于把其它模式的初始情景关联起来因为在大型项目中一个模式通常只是完成整个任务的一小步z基本原理对模式中的步骤和规则的证明性解释告诉我们模式实际上的工作方式以及为什么要采取这样的方式为什么这样是最好的模式的解决方案组件可能描述模式的外部可见的结构和行为而基本原理组件则说明了模式内在的结构和主要的机制z相关模式在同一模式语言或系统中该模式与其它模式之间的静态和动态关系相关模式通常会有相同的压力并且会有与其它模式相容的初始或结果情景这样的模式可能是前任模式其应用导致该模式的应用也可能是后继模式其应用紧跟在该模式应用之后可能是其它可选模式针对与该模式相同的问题在不同的压力和约束下提出不同的解决方案还可能是互相关的模式与该模式同时应用z已知使用描述该模式在已有系统中的出现和应用这有助于确认该模式的确是针对一个重复出现的问题的一个得到证明的解决模式的已知使用经常用作模式的使用指导虽然没有提出严格的要求但通常好的模式前面都有一个摘要提供一个简短的总结和概述为模式描绘出一个清晰的图画提供有关该模式能够解决问题的快速信息有时这种描述称为模式的缩略概要或一个模式缩略图模式应该说明它的目标读者以及对读者有哪些知识要求10.5 模式的质量除了包含上述的元素外定义良好的模式还应该具有一些重要的质量包括z封装和抽象每个模式都封装了在特定领域内一个定义良好的问题以及它的解决方案模式应该有清晰的边界概念以便于明确问题空间和解决方案空间模式还应该是抽象体现了领域知识和经验并且可能出现在该领域内不同的概念层次上z开放性和可变性每个模式都应该是开放的允许对它进行扩展或被其它模式参数化来共同解决大问题模式的解决方案也应该能够有无限种实现的方式孤立地或与其它任何模式一起z可再生性和可共存性一旦被应用那么每个模式都会生成一个结果情景这个情景可能会与一个或多个其它模式的初始情景匹配而后会继续应用后面的模式直到最终生成一个完整的解决方案但模式的应用通常不是线性的很可能一个模式的一部分会在特定的抽象和精细层次上导致其它不同层次上的模式或与它们复合z平衡每个模式必须实现它的压力和约束之间的某种平衡这种平衡可能来自用来使解决方案空间冲突最小化的一个或多个不变量和启发式这种不变量通常代表了解决问题最基本的原则或思想并解释了该模式中的每一个步骤或规则总之模式的目标是通过把它的每一组成部分技巧性地组织起来使它的整体和大于部分和10.6 一个简单的模式例子代理模式了解设计模式的最好办法就是去研究一个实际的模式下面我们就以代理模式为例进行讨论代理模式是一个结构模式把接口从实现中分离成不同的类它的主要思想是用一个代理对象作为另一个真实对象的代理由这个代理控制所有对真实对象的接入从而解决了当由于性质位置或接入限制而使得真实对象无法被直接实例化的问题这是一个非常简单的模式但很容易说明UML 是如何描述模式的图10-4是UML 中Proxy 模式的类图Request()Request()Request()图10-4 把Proxy 设计模式描述成一个UML 类图注意Subject 是一个抽象类因而是斜体Proxy 模式涉及三个类Subject RealSubject 和Proxy 图中的Client 类使用该模式使用抽象类Subject 中定义的接口在RealSubject 和Proxy 中都实现了Subject 定义的接口RealSubject 实现了接口中的操作而Proxy 类则把它收到的所有调用都委托给RealSubject去执行由Proxy 对象控制对RealSubject 对象的接入这一模式有以下几种应用场合z 更高的性能和效率在需要真正的对象之间系统可以用廉价的代理来减少耗费当在代理处调用操作时它首先检查是否已经实例化RealSubject 对象如果没有就把它实例化并把请求委托给它如果已经实例化了则立即转发请求这种方法在RealSubject 对象的创建非常昂贵时很有效比如必须读取数据库复杂的初始化等许多具有很长的启动时间的系统通过使用Proxy 模式可以显著地提高性能z 授权如果需要检查调用方是否具有调用RealSubject 对象的授权则可以由Proxy 来完成这时调用方必须给出它自己的身份Proxy 必须和某个授权对象通信是否允许接入z局部化RealSubject 对象可以位于其它系统中本地的Proxy只是在本系统中扮演它的角色而所有请求都被转发给其它系统本地客户只看到Proxy Proxy模式可以有许多种变形如完成其它功能无需全部委托给RealSubject可以改变参数的类型或操作的名词或者做一些准备工作来减少RealSubject的负荷这些变形体现了模式背后的思想模式是一种解决方案的核心可以有多种变形改装或扩展但不改变基本的方案在四人组的书中是用类图描述模式的用一个对象图和一个消息图有点类似UML中的序列图很多地方是用文本来描述某些方面如意图动机可应用性结构协作实现举例的代码以及模式的结合另外还包括同一模式其它的名字有类似性质的相关模式以及已知的该模式的用法模式的代码通常都简单根据需要把RealSubject实例化的 Proxy类的Java代码很简单如图10-5所示public class Proxy extends Object{RealSubject refersTo;public void Request(){if (refersTo == null)refersTo = new RealSubject();refersTo.Request();}}图10-5 把RealSubject实例化的 Proxy类的Java代码10.7 UML对模式的支持在应用设计模式时UML非常重要因为它允许模式作为架构的一部分如图10-6所示图10-6 在UML中模式的具体化图中Oberserver是设计模式同时还显示在该模式的特定使用中出现的实际的类在UML中模式是用一个协作描述的协作描述了情景和交互其中情景是指协作所涉及的所有对象它们之间的相互关系以及分别是哪个类的实例交互显示了在协作中对象完成的操作发送消息以及相互调用模式具有情景和交互因此很适合用协作来描述事实上是用一个参数化协作来描述的图10-7中的虚椭圆就是模式的符号里面是模式的名字模式必须有名字图10-8是Proxy模式对象图图中表明Client对象有一个链接是连到Proxy对象的然后又连接到RealSubject对象上图10-8 用对象图描述Proxy模式的情景在描述Proxy模式时交互显示了当客户提出请求时对象是如何交互的图10-9中的序列图显示了如何把请求授权给RealSubject对象以及结果是如何返回给客户的协作图可以在同一个图中显示出情景和交互图10-8的对象图中的情景以及图10-9中的交互都体现在图10-10中的协作图中了是否使用协作图或者分别表示在一个对象图和一个序列图中依情况而定更复杂的模式可能需要描述几个交互来显示该模式不同的行为图 10-9用序列图描述 Proxy 设计模式1: Request( ) aClient : Client 4:图 10-102: Request( ) aRealSubject : RealSubject 3:用协作图描述 Proxy 设计模式aProxy : ProxyStaticstics Interfacesu bj ec tProxy Sales StaticsticsrealsproxySalesubject图 10-11在一个类图中使用的 Proxy 模式其中 Statistics Interface 类有 subject 参与Sales 类有 proxy类参与 Sale Statistics 类有 realsubject 参与10.7.1 参数化协作 前面提到 实际上是用参数化协作或一个模板模式描述模式的 参数可以是在实例化 关系或者操作 在一个参数化协作中 参数叫做参加人 模板时指定的类型 如类 是类 关系或操作 设计模式参加人是模式定义的完成角色的应用元素 participant 例如 在 Proxy 模式中的担任 Subject Proxy 和 RealSubject 类的类 在图中 参加人的表 示是一个从模式符号与完成不同角色元素之间的一个相关性关联描述的 该相关性上标注 了参加角色的名 说明了在设计模式中该类所扮演的角色 在 Proxy 模式中 参加的角色 是 Subject Proxy 和 RealSubject 如果要扩展协作 则必须用参加的类显示出模式的情景和接口 图 10-11 有意识地使 参加人的类名与它们所扮演的角色不同 以此表明它在模式中的任务是由相关中的角色名 定义的 在实践中 通常都使类的名适合模式 例如 Sales 类叫做 SalesProxy SaleStatistics 类叫做 SalesStatisticsSubject 类 等等 但是 如果已经定义了该类或它们参加了几种模 式 就不能这样了 如果要对协作进行扩展 则显示出参加人在该模式中所 扮演 的角 色 如图 10-12 所示ClientSales Interface Sum()Sales Statistics Sum()Sales Sum()...... Sum(); ......图 10-12用图 10-11 中的参加人扩展 Proxy 模式数据库连接子 系 统 类数据库查询子系统类外观数据库系统Facade数据库语句类 统 系 子引用图形窗口观察人股票查询服务器 Observer主体GetCurrentPrice() GetHistoricalPrices()图 10-13模式是生成子这个类图显示了一组类它们的部分情景和协作是用模式描述的10.7.2 对使用模式的建议 模式被定义成参数化协作 有自己的名字 比基本元素的抽象级别高 代表了设计层 的构造 在不同的设计中可以重复使用同一个模式 因为使用模式后 无需显示出系统的所有部分 所以设计良好的模式可简化系统的描述 模式中的情景和交互是隐含的 因此 可以把模式看作设计方案的通用化子 如图 10-13 所示 在开发过程中 开发人员可以在图中扩展或隐藏模式所代表的情景和交互 用参加模 式的类表示 UML 中用参数化协作来描述模式是很自然的 以下是一些使用设计模式的 建议 模式的名非常重要 模式的名是比模式中的设计元素抽象级别符号 设计模式的 一个非常重要的性质就是能够在很高的抽象级别上进行通信和讨论 确保项目中所有的人都了解模式 有的模式非常简单 很容易给开发人员造成错 觉认为完全理解了模式的所有隐含意义 但往往事与愿违 所以在使用模式时一 定要注重建档和训练 可以改装或修改模式 但不要改变它们的基本性质 在不改变模式的基本核心的 前提下 可以有很多方法来改装或修改模式 因为模式的核心通常是使用它的最 根本原因 最好不要随便删除或改变 强调模式是一种可重用的设计 许多机构都想把模式变换成可重用的代码 类 库和程序 这样模式就只有一种特定的实现 而其它的变形都无法使用了 应该 强调 模式是在设计层面上的重用 而不是在代码层面的重用 注意新模式 会有许多新模式以及模式在新领域的应用不断涌现出来 不断跟踪 各种书籍 杂志 参加会议并游览互联网 将十分有利 10.7.3 模式和用例之间的联系 当我们更深入研究模式后 会发现模式与用例的实现之间有着某种相似之处 它们都 有以下几种特性 情景 两者都是用具有某种结构的一个对象的网络描述的 交互 关于对象如何协作都有一个主要的交互 它们在模式或用例中的行为 参加人 它们都由一组应用类 实例化 这组类在模式或用例扮演特定的角色 另外 在 UML 中用例的实现方式和模式的建档方式是一样的 参数化协作可以代表 一个模式 也可以代表对用例实现的描述 协作的名是模式或用例的名 协作与参加的类 相关 可以把模式看成一个通用的协作 多个系统都能用它 而用例是专用的 通常只能 由一个系统使用 见图 10-14 所示销售保险人 察Observer体 主观保险销售信息客户保险登记 窗口报价图窗口股票报价服 务器图 10-14用例协作和模式协作其中模式协作与参加的类相关10.8 应用设计模式进行系统设计模式自身是无法构成设计方法的 它是在软件开发周期的某些阶段支持设计人员进行 设计的基本构件 它们可以使某些决策过程更为具体 本节我们将举例说明如何在软件的 开发周期中使用设计模式 这一节我们将讨论如何在系统设计中应用设计模式 10.8.1 应用设计模式的主要活动 设计模式与软件开发过程有什么样的关系呢 我们可以把以下设计模式的主要活动应 用在开发周期中 如图 10-15 所示 模式实例化 这是标准的模式实践 选择一个设计模式 生成设计的一部分 标识候选模式 这是一个非标准的模式实践 在给定类结构中找到一个位置 为 了达到设计灵活性的目的 插入一个设计模式实例 分析 模式候选标识 演化 设计 模式实例化实现图 10-15 与模式有关的活动10.8.2 实例化和标识模式的步骤 前面我们区分了两种主要的模式活动 1 用模式进行设计 2 通过模式 使设计 第一种称为 把模式实例化 第二种称为在给定类结构中 标识候选模式 更为灵活 这两种活动都可以划分为四个 前两个有关做决策的问题 后两个有关结构变化 注意 这些步骤并不代表设计方法 它们只是明确使用模式的认知和技术过程 步骤 1 搜索和选择 设计人员寻求一种适合的设计模式 或者在给定的设计中 标识出模式候选 对模式实例化的工作是在设计的初始阶段进行的 而标识候选 模式则是在原型或工作系统开始工作以后 例如 当证明某个设计组件的功能还 不够时 通过在类结构中加入一个模式就可以使它变得更为灵活 这两种活动都 要求设计人员对模式有着全面的了解 设计人员知道的越多 他所选择的模式就 越匹配 通常 可能会几种选择 因此选择或标识的过程可能是一个做决策的问 题 这时 设计模式的压力部分就起到指导的作用 步骤 2 规划和分配 把模式实例化的过程将引起以下问题 在问题领域内模式。