1、2018/10/16,UML系统建模与分析设计,1,UML系统建模与分析设计,本章目的:了解设计模式的概念掌握设计模式的三大分类掌握常用的11种常的设计模式(其中简单 工厂是工厂方法的最初表现形式)了解各设计模式的优点、不足掌握设计模式的使用原则及策略,第八章 设计模式及其应用,2018/10/16,UML系统建模与分析设计,2,UML系统建模与分析设计,8.1.1模式和设计模式的概念 模式就是解决特定问题的经验,实质上就是软 件的复用。,8.1 设计模式概述,8.1.2设计模式的描述 一个设计模式有四个基本要素: 模式名称(pattern name):描述模式的问题、 解决方案和效果。 面对
2、问题(problem):描述了应该在何时使用 模式。,2018/10/16,UML系统建模与分析设计,3,UML系统建模与分析设计,解决方案(solution):描述了设计的组成成 分,职责和协作方式。 模式效果(consequences):描述了模式应用的 效果及使用模式应 权衡的问题。,8.1.3设计模式的作用和研究意义设计模式的作用和研究意义:(1)优化的设计经验。(2)极高的复用性。(3)丰富的表达能力。(4)极低的耦合度。,2018/10/16,UML系统建模与分析设计,4,UML系统建模与分析设计,8.2.1创建型设计模式 创建型模式隐藏了对象创建的具体细节,使程序代码不依赖具体的
3、对象。 创建型类的模式有工厂方法(Factory Method)模式; 创建型对象模式包括抽象工厂(Abstract Factory)、建造(Builder)、原型(Prototype)、单例 (Singleton)四种模式。,8.2 设计模式的分类及其相互间关系,2018/10/16,UML系统建模与分析设计,5,UML系统建模与分析设计,8.2.2结构型设计模式 结构型模式描述类和对象之间通过组织形成新的结构,以实现新的功能。 结构型的类模式采用继承机制来组合类,如适配器(Adapter)类模式; 结构型的对象模式则描述了对象的组装方式,如适配器(Adapter)对象模式、桥接(Bridg
4、e)模式、组合(Composite)模式、装饰(Decorator)模式、外观(Facade)模式、享元(Flyweight)模式、代理(Proxy)模式等。,2018/10/16,UML系统建模与分析设计,6,UML系统建模与分析设计,8.2.3行为型设计模式 行为型设计模式描述算法以及对象之间的任务(职责)分配及它们之间的通讯模式。 行为型的类模式用继承方法完成,有模板方法模式和解释器模式; 行为型的对象模式使用对象复合方法而不是继承,它描述一组对象怎样协作完成单个对象所无法完成的任务, 如职责链(Chain ofReponsibility)模式、命令(Command)模式、迭代器(Ite
5、rator)模式、中介者(Mediator)模式、备忘录(Memento)模式、观察者(Observer)模式、状态(State)模式、策略(Strategy)模式、访问者(Visitor)模式等。,2018/10/16,UML系统建模与分析设计,7,UML系统建模与分析设计,8.3.1工厂模式(Factory Model) 1简单工厂(Simple Factory)模式 类的创建模式,又称静态工厂方法模式。由一个工厂类根据传入的参数决定创建出哪一种产品类的实例。涉及到角色:(1)工厂类角色(Creator):由一个具体类来实现。(2)抽象产品角色(Product):可以用一个接口或 抽象类来
6、实现。(3)具体产品角色(ConcreteProduct):由一个具 体类来实现。,8.3 经典设计模式,2018/10/16,UML系统建模与分析设计,8,UML系统建模与分析设计,简单工厂模式的优缺点:(1)简单。(2)增加新的产品时,要修改工厂类,违反了面 向对象设计的基本原则。(3)工厂类一旦不能正常工作,整个程序都会受 到影响。(4)静态结构无法形成基于继承的层次结构。,2018/10/16,UML系统建模与分析设计,9,UML系统建模与分析设计,2工厂方法(Factory Method)模式 又称为多态性工厂模式。,参与的角色有:(1)抽象工厂接口(Creator):创建对象的工
7、厂类必须实施这个接口的实现。,2018/10/16,UML系统建模与分析设计,10,UML系统建模与分析设计,(2)具体工厂类(Concrete Creator):用于 创建产品实例的那样一些类。(3)产品(Product):是工厂方法模式所创 建的对象的父类,或它们共同拥有的接口。(4)具体产品(Concrete Product):是工厂 方法模式所创建的任何对象所属的类。工厂方法模式和简单工厂模式的区别是: 工厂方法模式的核心是一个抽象工厂类; 简单工厂模式把核心放在一个具体类上。 简单工厂模式是由工厂方法模式退化而来。,2018/10/16,UML系统建模与分析设计,11,UML系统建模
8、与分析设计,3抽象工厂(Abstract Factory)模式 实际使用的机会很少。是向客户提供一个接口,使得客户可以在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。,2018/10/16,UML系统建模与分析设计,12,UML系统建模与分析设计,(2)具体工厂类(Conrete Factory):应用 程序直接调用来创建产品实例的那些类。(3)抽象产品类(Abstract Product):抽象 工厂模式所创立的对象的父类或共同的接口。(4)具体产品类(Concrete Product):是抽象 工厂模式所创立的任何对象所属的类。,抽象工厂模式有4个角色:(1)抽象工厂类(Ab
9、stractFactory):创建对 象的工厂类必须实现接口,或继承该类。,2018/10/16,UML系统建模与分析设计,13,UML系统建模与分析设计,可以使用抽象工厂模式的条件:(1)一个系统要独立于它的产品的创建、组合和表 示时;(2)一个系统要由多个产品系列中的一个来配置时;(3)当你要强调一系列相关的产品对象的设计以便 进行联合使用时;(4)当你提供一个产品类库,而只想显示它们的接 口而不是实现时。实现抽象工厂模式时注意: 最好将抽象工厂设计为单例模式; 创建产品时,最好为每一个产品定义一个工厂方法; 将抽象工厂定义为可扩展的。,2018/10/16,UML系统建模与分析设计,14
10、,UML系统建模与分析设计,8.3.2适配器模式(Adapter) 适配器模式可以将某个类的接口转换成客户希望的另外一个类的接口。可以使用适配器模式的条件:(1)想要使用一个已经存在的类,而它的接口不 符合需求;(2)创建一个可以复用的类,该类可以与其他不 相关的类或不可预见的类协同工作;(3)对象适配器可以适配父类的接口。,2018/10/16,UML系统建模与分析设计,15,UML系统建模与分析设计,2018/10/16,UML系统建模与分析设计,16,UML系统建模与分析设计,实际应用适配器模式时要考虑的因素: 适配器Adapter的匹配程度。 可插入的适配器Adapter。 使用双向适
11、配器,对所有客户都提供透明操作。 与适配器模式相关的模式有代理模式等。,2018/10/16,UML系统建模与分析设计,17,UML系统建模与分析设计,8.3.3命令模式(Command) 将一个请求封装为对象,可用不同的请求对客户进行参数化、对请求进行排队、记录请求日志和支持可撤销的操作等。使用命令模式的条件:(1)抽象出待执行的动作以参数化某个对象时。(2)在不同的时刻指定、排列和执行请求时。(3)支持取消操作时。(4)支持修改日志,当系统崩溃时,根据已有的 日志修改可以被重做一遍。(5)用构建在原语操作上的高层操作构造一个系 统。,2018/10/16,UML系统建模与分析设计,18,U
12、ML系统建模与分析设计,参与模式运行的角色有: 抽象类Command声明执行操作的接口。 具体命令类ConcreteCommand将接收者对象Receiver 绑定于一个动作,同时调用接收者相应的操作,以 实现Execute。,2018/10/16,UML系统建模与分析设计,19,UML系统建模与分析设计,客户类Client创建一个具体命令对象并设定它的接 收者。Invoker要求该命令执行这个请求。接收者对象Receiver知道如何实施并执行一个与请求相关的操作 实现命令模式时应注意的问题: 考虑一个命令对象应达到何种智能程度,以动态 地找到它们的接收者。 是否支持取消(undo)和重做(r
13、edo)。 在抽象类Command中存入更多的信息避免取消操 作过程中的错误积累。 如何使用C+模板来完成设计。,2018/10/16,UML系统建模与分析设计,20,UML系统建模与分析设计,8.3.4解释器模式(Interpreter) 解释器模式是类行为型模式。,2018/10/16,UML系统建模与分析设计,21,UML系统建模与分析设计,参与解释器模式的对象有: 抽象类AbstractExpression声明一个抽象的解 释操作,为语法树中所有的节点共享。 终结符表达式节点类TerminalExpression实现 与文法中的终结符相关联的解释操作。 非终结符表达式节点类Nonter
14、minalExpression 进行一般的解释操作。 语境类Context包含解释器之外的一些全局信 息。 客户类Client构建表示该文法定义的语言中一 个特定句子的抽象语法树。,2018/10/16,UML系统建模与分析设计,22,UML系统建模与分析设计,8.3.5迭代器模式(Iterator) 迭代器模式提供一种顺序访问某个对象集合中的各个元素的功能,而又不需暴露该对象的内部表示。迭代器和对象集合具有极强的耦合性。,2018/10/16,UML系统建模与分析设计,23,UML系统建模与分析设计,迭代器模式可在下列情况时使用:1)访问一个对象集合的内容而又不暴露它的内部表示。2)支持对对
15、象集合的多种遍历。3)为遍历不同的集合结构提供一个统一的接口,即支持多态 迭代。参与的对象有: 抽象迭代器类Iterator定义访问和遍历元素的接口。 具体迭代器类ConcreteIterator实现迭代器接口,并对该 集合遍历时跟踪当前位置。 抽象集合类Aggregate定义创建相应迭代器对象的接口。 具体集合类ConcreteAggreagate实现创建相应迭代器的 接口,该操作返回具体迭代器类ConcreteIterator的一 个适当的实例。,2018/10/16,UML系统建模与分析设计,24,UML系统建模与分析设计,迭代器模式有三个重要的作用: 支持以不同的方式遍历一个集合,复杂
16、的集合 可用多种方式进行遍历。 迭代器简化了集合的接口。 在同一个集合上可以有多个遍历。,2018/10/16,UML系统建模与分析设计,25,UML系统建模与分析设计,8.3.6观察者模式(Observer) 当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。,2018/10/16,UML系统建模与分析设计,26,UML系统建模与分析设计,使用观察者模式的情况: 当一个抽象模式分为两个封装在分别独立的对象中,各 自独立地改变和复用。 当对一个对象的改变需要同时改变其它对象,而不知道 具体有多少对象有待改变。 当一个对象必须通知其它对象,而它又不能假定其它对 象是谁。参与观
17、察者模式的对象有: 目标对象Subject提供注册和删除Observe对象的接口并 可以有任意多个Observe。 抽象观察者类Observe为在Subject改变时需获得通知的 对象定义一个更新的接口。 具体目标对象ConcreteSubject自身状态发生变化时,向 它的各个观察者对象Observe发出通知。 具体观察者对象ConcreteObserver维护一引用,以使存 储状态、自身状态与目标对象Subject状态保持一致。,2018/10/16,UML系统建模与分析设计,27,UML系统建模与分析设计,8.3.7代理模式(Proxy),使用代理模式常见情况有: 远程代理(Remote
18、 Proxy)。为一个对象在不同 的地址空间提供局部代表。 虚拟代理(Virtual Proxy)。根据需要创建开 销很大的对象。 保护代理(Protection Proxy)。控制对原始对 象的访问。 智能引用(Smart Reference)取代了简单的指 针,在访问对象时执行一些附加操作。,2018/10/16,UML系统建模与分析设计,28,UML系统建模与分析设计,代理模式的参与者有: 客户对象Client向一个作为接口的Subject发出请求。 代理对象Proxy保存一个引用使其可以访问实体。 抽象类Subject定义实体目标对象Realsubject和代理 对象Proxy的共用接
19、口。 实体目标对象RealSubject定义代理对象Proxy所代表 的实体。,2018/10/16,UML系统建模与分析设计,29,UML系统建模与分析设计,8.3.8单例模式(Singleton),单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常单例模式适合在下列情况中使用: 当类只能有一个实例而且客户可以从众所周知的访问点访 问它时。 该唯一实例通过子类化可扩展,客户无需更改代码就能使 用一个扩展的实例时。,2018/10/16,UML系统建模与分析设计,30,UML系统建模与分析设计,单例模式的参与者有: 单例对象Singleton定义一个Instance( )操作,
20、允许客户 访问它的唯一实例,并创建它自己的唯一实例。 Instance( )是一个类操作(即Smalltalk中的一个类方法 和C+中的一个静态成员函数)。单例模式的优点: 因为单例类Singleton封装了它的唯一实例,可以实现对 唯一实例的受控访问。 单例类Singleton可以有子类,很容易用这个扩展类的实 例来配置一个应用。 单例模式允许可变数目的实例,可以灵活改变设计想法。 通过实践表明,单例模式相比类操作要更灵活。,2018/10/16,UML系统建模与分析设计,31,UML系统建模与分析设计,8.3.9状态模式(State),状态模式允许一个对象在其内部状态变化时改变它的行为。,
21、下面两种情况之一可以使用状态模式:1)一个对象的行为取决于它的状态,并且它必须在运行 时刻根据状态改变它的行为。2)一个操作中含有庞大的多分支的条件语句,且这些分 支依赖于该对象的状态。,2018/10/16,UML系统建模与分析设计,32,UML系统建模与分析设计,参与状态模式的对象有: 语境对象Context定义客户接口,并维护一个 定义ConcreteState子类的实例。 抽象类State定义一个接口以封装与语境对象 Context的一个特定状态相关的行为。 具体状态ConcreteState子类实现一个与语境 对象Context的一个状态相关的行为。,2018/10/16,UML系统
22、建模与分析设计,33,UML系统建模与分析设计,8.3.10策略模式(Strategy),将一组算法中的每个算法封装到具有共同接口的独立类中,使得它们可以相互替换。1使用策略模式的时机 多个类之间的区别仅在于它们的行为,使用策略模 式可以动态地选择一种行为。 一个系统需要动态地在几种算法中选择一种。 一个系统的算法使用的数据不可以让客户端知道。 避免使用难以维护的多重条件选择语句,体现面向 对象设计的概念。,2018/10/16,UML系统建模与分析设计,34,UML系统建模与分析设计,2策略模式的结构,策略模式涉及到三个角色: 语境(Context)角色:持有策略类Strategy的引用。
23、抽象策略(Strategy)角色:这是一个接口或抽象类。 具体策略(ConcreteStrategy)角色:以Strategy接口 实现某个具体算法。,2018/10/16,UML系统建模与分析设计,35,UML系统建模与分析设计,3策略模式的优点和缺点,策略模式的优点有: 策略模式提供了管理相关的算法族的办法。避免重复 的代码。 策略模式提供了可以替换继承关系的办法。使其不可 能动态改变算法或行为。 使用策略模式可以避免使用多重条件转移语句。策略模式的缺点有: 客户端必须知道所有的策略类,并自行决定使用哪一 个策略类。 策略模式造成很多的策略类。,2018/10/16,UML系统建模与分析设
24、计,36,UML系统建模与分析设计,8.3.11访问者模式(Visitor),访问者模式可以在不改变各元素的类的前提下定义作用于这些元素的新操作。,2018/10/16,UML系统建模与分析设计,37,UML系统建模与分析设计,访问者模式通常适用于下列情况:1)一个对象包含很多有不同接口的类对象,这些 对象实施一些依赖于其具体类的操作。2)对一个对象中的对象进行很多不相关的操作, 而又不想直接接触这些对象的类。3)定义对象结构的类很少改变,但经常需要在此 结构上定义新的操作。,2018/10/16,UML系统建模与分析设计,38,UML系统建模与分析设计,8.4.1设计模式遵循的原则(1)开-
25、闭原则(Open-Closed Principle,OCP)。对扩 展开放,对修改关闭。(2)里氏代换原则(Liskov Substitution Principle, LSP)。软件实体如果使用的是一个基类,那么一定 适用于其子类,而且它根本不能察觉出基类对象和 子类对象的区别。(3)依赖倒转原则(Dependence Inversion Principle, DIP)。要依赖于抽象,不要依赖于具体。即针对接 口编程,不要针对实现编程。(4)接口隔离原则(Interface Segregation Principle,ISP)。一个类对另外一个类的依赖是建 立在最小的接口上。,8.4 设计模
26、式遵循的原则和使用策略,2018/10/16,UML系统建模与分析设计,39,UML系统建模与分析设计,(5)合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)。要尽量使用合成 /聚合,尽量不要使用继承。(6)迪米特法则(Law of Demeter,LoD)。一个 对象应该对其它对象有尽可能少的了解。通 过第三者转发这个调用。(7)单一职责原则(Simple responsibility principle,SRP)。就一个类而言,应该有 且仅有一个引起它变化的原因。,2018/10/16,UML系统建模与分析设计,40,UML系统建模与分
27、析设计,8.4.2设计模式的使用策略1设计模式的选择方法(1)理解问题需求(2)研究和掌握设计模式是如何解决设计问题的2设计模式的使用(1)理解所选择的模式,注意使用效果,确定该模式是否 适合所要解决的实际问题。(2)研究模式的结构、组成以及它们之间如何协作,以及 他们的关联关系。(3)选择模式参与者的名字,使这些名字在具体应用中有 意义。(4)定义类及接口,建立它们的继承关系,定义代表数据 和对象引用的实例变量。(5)定义模式中专用于具体应用的操作名称。(6)实现执行模式中责任和协作的操作。,2018/10/16,UML系统建模与分析设计,41,UML系统建模与分析设计,8.5.1UML设计
28、模式分析(1)问题的描述:我们采用UML中的用例图来描 述设计模式的问题部分。(2)解决方案的描述:它是描述设计模式的核心 部分。(3)效果的描述:模式效果描述了模式应用的效 果及使用该模式应权衡的问题。,8.5 几种设计模式应用探析,2018/10/16,UML系统建模与分析设计,42,UML系统建模与分析设计,8.5.2MFC框架设计模式分析 MFC(Microsoft Foundation Class,微软基础类库)是微软推出的一套开发Windows平台软件的规模宏大的类库,它是一套应用框架。(1)观察者模式(2)单例模式(3)中介者模式,2018/10/16,UML系统建模与分析设计,43,UML系统建模与分析设计,8.5.3XML设计模式分析 XML主要用于构建web应用,以简洁统一的结构使数据,尤其是半结构化数据的描述规则化。,2018/10/16,UML系统建模与分析设计,44,UML系统建模与分析设计,8.6 本章小结,
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。