资源预览内容
第1页 / 共57页
第2页 / 共57页
第3页 / 共57页
第4页 / 共57页
第5页 / 共57页
第6页 / 共57页
第7页 / 共57页
第8页 / 共57页
第9页 / 共57页
第10页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
UML建模语言及工具建模语言及工具第第 7 章面向对象的设计模式章面向对象的设计模式Object-Oriented Design PatternsReview: 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 Principlen3学习线路图学习线路图OOUMLOOAOOAOOPOOPDPDP Case-Study 学学 习习 线线 路路 图图4内容安排内容安排n n设计模式设计模式nGoF设计模式及应用设计模式及应用5设计模式设计模式n什么是设计模式?什么是设计模式?n设计就是解决方案设计就是解决方案对对某个问题某个问题某个问题某个问题的解决的解决n如果某个解决方案对如果某个解决方案对某类问题某类问题某类问题某类问题都很有用都很有用n这时就把它总结出来这时就把它总结出来n这就产生了设计模式这就产生了设计模式6设计模式的基本要素设计模式的基本要素n1. 名称:用于助记,形象表示这个模式名称:用于助记,形象表示这个模式n2. 问题:这个模式可以解决什么问题问题:这个模式可以解决什么问题n3. 解决方案:这个模式怎样解决这个问解决方案:这个模式怎样解决这个问题的步骤与方法题的步骤与方法n4. 效果:使用这个模式与不使用这个模效果:使用这个模式与不使用这个模式有什么区别,它有什么优点和缺点式有什么区别,它有什么优点和缺点 一个问题可以有多种解法,好的解法都可以找到很多种,每一个问题可以有多种解法,好的解法都可以找到很多种,每一个问题可以有多种解法,好的解法都可以找到很多种,每一个问题可以有多种解法,好的解法都可以找到很多种,每种都有优缺点;所以编程时不要死记方法,应该活学活用种都有优缺点;所以编程时不要死记方法,应该活学活用种都有优缺点;所以编程时不要死记方法,应该活学活用种都有优缺点;所以编程时不要死记方法,应该活学活用7设计模式的基本思想设计模式的基本思想-1n软件是在不断进化的软件是在不断进化的n需求在不断改变,所以软件应该适应变化需求在不断改变,所以软件应该适应变化n设计模式是为了让软件更加适应变化,有更设计模式是为了让软件更加适应变化,有更多的可复用性;就是有变化时你不用从头重多的可复用性;就是有变化时你不用从头重写一次这个软件写一次这个软件n如何适应变化?如何适应变化?n就应该封装变化,让变化的影响最小就应该封装变化,让变化的影响最小n封装复杂性,提供简单的接口封装复杂性,提供简单的接口 8设计模式的基本思想设计模式的基本思想-2n1. 松耦合松耦合n2. 针对接口编程,而不是针对实现编程针对接口编程,而不是针对实现编程n3. 继承、组合、委托、多态、参数化继承、组合、委托、多态、参数化9内容安排内容安排n设计模式设计模式n nGoF设计模式及应用设计模式及应用10经典设计模式:经典设计模式:GoF创建型创建型创建型创建型结构型结构型结构型结构型行为型行为型行为型行为型类类类类Factory MethodAdapter_ClassInterpreterTemplate Method对象对象对象对象Abstract FactoryBuilderPrototypeSingletonAdapter_ObjectBridgeCompositeDecoratorFacadeFlyweightProxyChain of ResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitorGoFGoF(Gang of FourGang of Four) 2323种经典设计模式种经典设计模式种经典设计模式种经典设计模式11GoF模式分类模式分类-1n根据模式的目的根据模式的目的(用来完成什么工作的用来完成什么工作的) n创建型模式创建型模式n结构型模式结构型模式n行为型模式行为型模式n根据模式的作用范围根据模式的作用范围(是处理类还是处理是处理类还是处理对象的对象的):n类模式类模式n对象模式对象模式12GoF模式分类模式分类-2n创建型模式创建型模式n创建型类模式将对象的部分创建工作延迟到子类创建型类模式将对象的部分创建工作延迟到子类n创建型对象模式将它延迟到另一个对象中创建型对象模式将它延迟到另一个对象中n结构型模式结构型模式n结构型类模式使用继承机制来组合类结构型类模式使用继承机制来组合类n结构型对象模式描述了对象间的组装方式结构型对象模式描述了对象间的组装方式n行为型模式行为型模式n行为型类模式使用继承描述算法与控制法行为型类模式使用继承描述算法与控制法n行为型对象模式则描述一组对象怎样协作完成单个行为型对象模式则描述一组对象怎样协作完成单个对象无法完成的工作对象无法完成的工作13-创建型模式 这一类型的设计模式, 所要表现的是对象的创建过程及和用户所使用的对象之间的关系. 单例模式单例模式(Singleton)单例模式有以下的特点:单例模式有以下的特点:n 单例类只可有一个实例。单例类只可有一个实例。n 单例类必须自己创建自己这惟一的实例。单例类必须自己创建自己这惟一的实例。n 单例类必须给所有其他对象提供这一实例。单例类必须给所有其他对象提供这一实例。15Singleton模式结构16Singleton模式实现17Singleton模式实现18Singleton模式的要点模式的要点n1.隐藏默认类的构造函数n2.添加一个共享的成员,以引用单独的,实例化的对象n3.创建一个公有函数来创建或返回被引用的对象19使用使用Singleton模式模式n适用场景:1.某个软件组件需要访问数据库,为此,可能希望整个组件只创建一个数据库连接2.整个系统的主控类,一般只能创建一个.20Singleton模式优缺点模式优缺点nSingleton模式是做为全局变量的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变量不具备的性质:同类型的对象实例只可能有一个。21-结构型模式 这一类的模式关心类和对象之间怎么组织起来形成大的结构. Adapter 模式模式n目的:将一个类的接口转换成客户希望目的:将一个类的接口转换成客户希望的另外一个接口。的另外一个接口。Adapter模式使得原模式使得原本由于接口不兼容而不能一起工作的那本由于接口不兼容而不能一起工作的那些类可以一起工作。些类可以一起工作。n实现:实现:类适配器类适配器使用多重继承对一个接使用多重继承对一个接口与另一个接口进行匹配;口与另一个接口进行匹配;对象适配器对象适配器依赖于对象组合。依赖于对象组合。23Adapter 模式模式n类适配器结构类适配器结构24Adapter 模式模式n使用C+实现类适配器 Adapter类采用公共方式继承类采用公共方式继承Target类,用私有方式继承类,用私有方式继承Adaptee类。类。25Adapter 模式模式示例代码:class Adaptee / class Adaptee public: void SpecialRequest() ;class Target/ class Target public: virtual void Request() = 0 ; ;26Adapter 模式模式 / class Adapterclass Adapter : public Target, private Adaptee public: virtual void Request() SpecialRequest() ; ;27Adapter 模式模式客户端代码: Target *p = new Adapter() ;p-Request() ; /实际上调用的是Adaptee:SpecialRequest()28Adapter 模式模式n对象适配器结构对象适配器结构29Adapter 模式模式n使用C+实现对象适配器 Adapter类采用公共方式继承类采用公共方式继承Target类,将类,将Adaptee类对象作为自己的私有类对象作为自己的私有成员变量。成员变量。30Adapter 模式模式n示例代码:class Adaptee / class Adaptee public: void SpecialRequest() ;class Target / class Target public: virtual void Request() = 0 ; ;31Adapter 模式模式 / class Adapterclass Adapter : public Target public: virtual void Request() _adaptee.SpecialRequest() ; private: Adaptee _adaptee ; ;32Adapter 模式模式客户端代码: Target *p = new Adapter() ;p-Request() ; /实际上调用的是Adaptee:SpecialRequest()33Adapter 模式模式适用性:你想使用一个已经存在的类,而它的接口不符你想使用一个已经存在的类,而它的接口不符合你的需求。合你的需求。你想创建一个可以复用的类,该类可以与其他你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。不一定兼容的类)协同工作。(仅适用于对象Adapter)你想使用一些已经你想使用一些已经存在的子类,但是不可能对每一个都进行子类存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它化以匹配它们的接口。对象适配器可以适配它的父类接口。的父类接口。34例子:动物图形编辑器我们的程序现成的程序35策略策略1对象适配器对象适配器36策略策略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 n37策略2类适配器38策略策略2采用继承采用继承npublic class TigerAdaptor1 extends Tiger implements Tookit nn public TigerAdaptor1() n n n n public void draw() n n super.paint();n n39设计模式之Proxy(代理)n例子:例子:Windows的快捷方式的快捷方式40设计模式之Proxy(代理)设计模式中定义: 为其他对象提供一种代理以控制对这个对象的访问。 某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.41设计模式之Proxy(代理)42设计模式之Proxy(代理)高三小姐的神貌和本人高三小姐的神貌和本人高三小姐的神貌和本人高三小姐的神貌和本人悟空扮演并代替高三小姐悟空扮演并代替高三小姐43八戒分辨不出真假老婆44设计模式之Facade(门面)45设计模式之Facade(门面)门面模式要求一个子系统的外部与其内部的通信必须通门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(过一个统一的门面(Facade)对象进行门面模式提对象进行门面模式提供一个高层次接口,使得子系统更易于使用供一个高层次接口,使得子系统更易于使用46设计模式之Facade(门面)一个例子:保安系统一个保安系统由两个录像机,三一个例子:保安系统一个保安系统由两个录像机,三个电灯,一个遥感器和一个报警器组成操作人员需个电灯,一个遥感器和一个报警器组成操作人员需要经常将这些仪器启动和关闭要经常将这些仪器启动和关闭47不使用Facade(门面)48使用Facade(门面)49-行为模式行为模式 这一类的模式关心的是算法以及对象之间的任务分配. 它所描述的不仅仅是对象或类的设计模式, 还有它们之间的通讯模式. 模版方法模版方法(Template Method)n目的:准备一个抽象类,将部分逻辑用目的:准备一个抽象类,将部分逻辑用具体方法或者具体构造方法来实现,然具体方法或者具体构造方法来实现,然后声明一些抽象方法迫使子类实现剩余后声明一些抽象方法迫使子类实现剩余的逻辑的逻辑。51模版方法模版方法(Template Method)n例子:计算存款利息假设系统需要支持例子:计算存款利息假设系统需要支持两种存款账号,即货币市场(两种存款账号,即货币市场(Money Market)账号和定期存款(账号和定期存款(CD或或Certificate of Deposite)这两种利息这两种利息的计算方法不同的计算方法不同52模版方法模版方法(Template Method)53模版方法模版方法(Template Method)西天取经西天取经54策略策略(Strategy)n目的:将一系列算法一一封装,并且使目的:将一系列算法一一封装,并且使他们可相互替换。使得算法的变化可独他们可相互替换。使得算法的变化可独立于使用它的客户。立于使用它的客户。n适用适用n许多相关的类仅仅是行为有异许多相关的类仅仅是行为有异n可以使用一个算法的不同变体可以使用一个算法的不同变体55策略策略56图书打折例子图书打折例子57
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号