UML建模语言及工具:第 7 章面向对象的设计模式_第1页
UML建模语言及工具:第 7 章面向对象的设计模式_第2页
UML建模语言及工具:第 7 章面向对象的设计模式_第3页
UML建模语言及工具:第 7 章面向对象的设计模式_第4页
UML建模语言及工具:第 7 章面向对象的设计模式_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-3-Review: Object-Oriented Design PrinciplesnLSP:Liskov替换原则替换原则nThe Liskov Substitution PrinciplenOCP:开放:开放-封闭原则封闭原则nThe Open-Close PrinciplenSRP:单一职责原则:单一职责原则nThe Single Responsibility PrinciplenISP:接口隔离原则:接口隔离原则nThe Interface Segregation Principle nDIP:依赖倒置原则:依赖倒置原则nThe Dependency Inversion Princi

2、plen-4-学习线路图学习线路图OOOOUMLUML : : Case-Study : : : -5-内容安排内容安排nGoF设计模式及应用设计模式及应用-6-设计模式设计模式n什么是设计模式?什么是设计模式?n设计就是解决方案设计就是解决方案对对的解决的解决n如果某个解决方案对如果某个解决方案对都很有用都很有用n这时就把它总结出来这时就把它总结出来n这就产生了设计模式这就产生了设计模式-7-设计模式的基本要素设计模式的基本要素n1. 名称:用于助记,形象表示这个模式名称:用于助记,形象表示这个模式n2. 问题:这个模式可以解决什么问题问题:这个模式可以解决什么问题n3. 解决方案:这个模式

3、怎样解决这个问解决方案:这个模式怎样解决这个问题的步骤与方法题的步骤与方法n4. 效果:使用这个模式与不使用这个模效果:使用这个模式与不使用这个模式有什么区别,它有什么优点和缺点式有什么区别,它有什么优点和缺点 -8-设计模式的基本思想设计模式的基本思想-1n软件是在不断进化的软件是在不断进化的n需求在不断改变,所以软件应该适应变化需求在不断改变,所以软件应该适应变化n设计模式是为了让软件更加适应变化,有更设计模式是为了让软件更加适应变化,有更多的可复用性;就是有变化时你不用从头重多的可复用性;就是有变化时你不用从头重写一次这个软件写一次这个软件n如何适应变化?如何适应变化?n就应该封装变化,

4、让变化的影响最小就应该封装变化,让变化的影响最小n封装复杂性,提供简单的接口封装复杂性,提供简单的接口 -9-设计模式的基本思想设计模式的基本思想-2n1. 松耦合松耦合n2. 针对接口编程,而不是针对实现编程针对接口编程,而不是针对实现编程n3. 继承、组合、委托、多态、参数化继承、组合、委托、多态、参数化-10-内容安排内容安排n设计模式设计模式-11-经典设计模式:经典设计模式:GoFFactory MethodAdapter_ClassInterpreterTemplate MethodAbstract FactoryBuilderPrototypeSingletonAdapter_O

5、bjectBridgeCompositeDecoratorFacadeFlyweightProxyChain of ResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitor-12-GoF模式分类模式分类-1n根据模式的目的根据模式的目的(用来完成什么工作的用来完成什么工作的) n创建型模式创建型模式n结构型模式结构型模式n行为型模式行为型模式n根据模式的作用范围根据模式的作用范围(是处理类还是处理是处理类还是处理对象的对象的):n类模式类模式n对象模式对象模式-13-GoF模式分类模式分类-2n创建型模式创

6、建型模式n创建型类模式将对象的部分创建工作延迟到子类创建型类模式将对象的部分创建工作延迟到子类n创建型对象模式将它延迟到另一个对象中创建型对象模式将它延迟到另一个对象中n结构型模式结构型模式n结构型类模式使用继承机制来组合类结构型类模式使用继承机制来组合类n结构型对象模式描述了对象间的组装方式结构型对象模式描述了对象间的组装方式n行为型模式行为型模式n行为型类模式使用继承描述算法与控制法行为型类模式使用继承描述算法与控制法n行为型对象模式则描述一组对象怎样协作完成单个行为型对象模式则描述一组对象怎样协作完成单个对象无法完成的工作对象无法完成的工作-创建型模式 这一类型的设计模式, 所要表现的是

7、对象的创建过程及和用户所使用的对象之间的关系. -15-单例模式单例模式(Singleton)单例模式有以下的特点:单例模式有以下的特点:n 单例类只可有一个实例。单例类只可有一个实例。n 单例类必须自己创建自己这惟一的实例。单例类必须自己创建自己这惟一的实例。n 单例类必须给所有其他对象提供这一实例。单例类必须给所有其他对象提供这一实例。-16-Singleton模式结构-17-Singleton模式实现-18-Singleton模式实现-19-Singleton模式的要点模式的要点n1.隐藏默认类的构造函数n2.添加一个共享的成员,以引用单独的,实例化的对象n3.创建一个公有函数来创建或返

8、回被引用的对象-20-使用使用Singleton模式模式n适用场景:1.某个软件组件需要访问数据库,为此,可能希望整个组件只创建一个数据库连接2.整个系统的主控类,一般只能创建一个.-21-Singleton模式优缺点模式优缺点nSingleton模式是做为全局变量的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变量不具备的性质:同类型的对象实例只可能有一个。-结构型模式 这一类的模式关心类和对象之间怎么组织起来形成大的结构. -23-Adapter 模式模式n目的:将一个类的接口转换成客户希望目的:将一个类的接口转换成客户希望的另外一个接口。的另外一

9、个接口。Adapter模式使得原模式使得原本由于接口不兼容而不能一起工作的那本由于接口不兼容而不能一起工作的那些类可以一起工作。些类可以一起工作。n实现:实现:类适配器类适配器使用多重继承对一个接使用多重继承对一个接口与另一个接口进行匹配;口与另一个接口进行匹配;对象适配器对象适配器依赖于对象组合。依赖于对象组合。-24-Adapter 模式模式n类适配器结构类适配器结构-25-Adapter 模式模式n使用C+实现类适配器 Adapter类采用公共方式继承类采用公共方式继承Target类,用私有方式继承类,用私有方式继承Adaptee类。类。-26-Adapter 模式模式示例代码:clas

10、s Adaptee / class Adaptee public: void SpecialRequest() ;class Target/ class Target public: virtual void Request() = 0 ; ;-27-Adapter 模式模式 / class Adapterclass Adapter : public Target, private Adaptee public: virtual void Request() SpecialRequest() ; ;-28-Adapter 模式模式客户端代码: Target *p = new Adapter()

11、 ;p-Request() ; /实际上调用的是Adaptee:SpecialRequest()-29-Adapter 模式模式n对象适配器结构对象适配器结构-30-Adapter 模式模式n使用C+实现对象适配器 Adapter类采用公共方式继承类采用公共方式继承Target类,将类,将Adaptee类对象作为自己的私有类对象作为自己的私有成员变量。成员变量。-31-Adapter 模式模式n示例代码:class Adaptee / class Adaptee public: void SpecialRequest() ;class Target / class Target public:

12、 virtual void Request() = 0 ; ;-32-Adapter 模式模式 / class Adapterclass Adapter : public Target public: virtual void Request() _adaptee.SpecialRequest() ; private: Adaptee _adaptee ; ;-33-Adapter 模式模式客户端代码: Target *p = new Adapter() ;p-Request() ; /实际上调用的是Adaptee:SpecialRequest()-34-Adapter 模式模式适用性:你想使

13、用一个已经存在的类,而它的接口不符你想使用一个已经存在的类,而它的接口不符合你的需求。合你的需求。你想创建一个可以复用的类,该类可以与其他你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。不一定兼容的类)协同工作。(仅适用于对象Adapter)你想使用一些已经你想使用一些已经存在的子类,但是不可能对每一个都进行子类存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它化以匹配它们的接口。对象适配器可以适配它的父类接口。的父类接口。-35-例子:动物图形编辑器我们的程序现成的

14、程序-36-策略策略1对象适配器对象适配器-37-策略策略1对象适配器对象适配器n/这是个适配器程序,这是个适配器程序,适配适配Tiger使其具有使其具有Tookit的接口的接口npublic class TigerAdaptor implements Tookit nn public Tiger theTiger;n public TigerAdaptor(Tiger t) n n theTiger=t;n n public void draw() n n theTiger.paint();n n-38-策略2类适配器-39-策略策略2采用继承采用继承npublic class TigerA

15、daptor1 extends Tiger implements Tookit nn public TigerAdaptor1() n n n n public void draw() n n super.paint();n n-40-设计模式之Proxy(代理)n例子:例子:Windows的快捷方式的快捷方式-41-设计模式之Proxy(代理)设计模式中定义: 为其他对象提供一种代理以控制对这个对象的访问。 某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.-42-设计模式之Proxy(代理)-43-设计模式之Proxy(代理)悟空扮演并代替高三小姐悟空扮演并代替高三小姐-44-

16、八戒分辨不出真假老婆-45-设计模式之Facade(门面)-46-设计模式之Facade(门面)门面模式要求一个子系统的外部与其内部的通信必须通门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(过一个统一的门面(Facade)对象进行门面模式提对象进行门面模式提供一个高层次接口,使得子系统更易于使用供一个高层次接口,使得子系统更易于使用-47-设计模式之Facade(门面)一个例子:保安系统一个保安系统由两个录像机,三一个例子:保安系统一个保安系统由两个录像机,三个电灯,一个遥感器和一个报警器组成操作人员需个电灯,一个遥感器和一个报警器组成操作人员需要经常将这些仪器启动和关闭要

17、经常将这些仪器启动和关闭-48-不使用Facade(门面)-49-使用Facade(门面)-行为模式行为模式 这一类的模式关心的是算法以及对象之间的任务分配. 它所描述的不仅仅是对象或类的设计模式, 还有它们之间的通讯模式. -51-模版方法模版方法(Template Method)n目的:准备一个抽象类,将部分逻辑用目的:准备一个抽象类,将部分逻辑用具体方法或者具体构造方法来实现,然具体方法或者具体构造方法来实现,然后声明一些抽象方法迫使子类实现剩余后声明一些抽象方法迫使子类实现剩余的逻辑的逻辑。-52-模版方法模版方法(Template Method)n例子:计算存款利息假设系统需要支持例子:计算存款利息假设系统需要支持两种存款账号,即货币市场(两种存款账号,即货币市场(Money Market)账号和定期存款(账号和定期存款(CD或或Certificate of Deposite)这两种利息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论