第7章-软件体系结构风格与设计模式课件

上传人:hloru****lorv6 文档编号:241298738 上传时间:2024-06-16 格式:PPT 页数:85 大小:3.54MB
返回 下载 相关 举报
第7章-软件体系结构风格与设计模式课件_第1页
第1页 / 共85页
第7章-软件体系结构风格与设计模式课件_第2页
第2页 / 共85页
第7章-软件体系结构风格与设计模式课件_第3页
第3页 / 共85页
点击查看更多>>
资源描述
前言前言1 1、软件体系结构是软件工程的一个重要研究内容、软件体系结构是软件工程的一个重要研究内容、软件体系结构是软件工程的一个重要研究内容、软件体系结构是软件工程的一个重要研究内容2 2、软件体系结构的设计是软件开发中的一个关键环节,是、软件体系结构的设计是软件开发中的一个关键环节,是、软件体系结构的设计是软件开发中的一个关键环节,是、软件体系结构的设计是软件开发中的一个关键环节,是软件质量的重要保证。软件质量的重要保证。软件质量的重要保证。软件质量的重要保证。3 3、软件体系结构已经成为一个重要的研究方向和独立的、软件体系结构已经成为一个重要的研究方向和独立的、软件体系结构已经成为一个重要的研究方向和独立的、软件体系结构已经成为一个重要的研究方向和独立的 学科分支。学科分支。学科分支。学科分支。4 4、软件体系结构对软件的总体结构进行清晰的描述和分析、软件体系结构对软件的总体结构进行清晰的描述和分析、软件体系结构对软件的总体结构进行清晰的描述和分析、软件体系结构对软件的总体结构进行清晰的描述和分析、并用它指导软件的后续开发。并用它指导软件的后续开发。并用它指导软件的后续开发。并用它指导软件的后续开发。5 5、模式的本质:可解决一类问题并能重复使用的解决方案、模式的本质:可解决一类问题并能重复使用的解决方案、模式的本质:可解决一类问题并能重复使用的解决方案、模式的本质:可解决一类问题并能重复使用的解决方案前言前言1、软软件体系件体系结结构是构是软软件工程的一个重要研究内容件工程的一个重要研究内容1内容内容7.17.1基本概念基本概念基本概念基本概念7.27.2软件体系结构描述语言软件体系结构描述语言软件体系结构描述语言软件体系结构描述语言7.37.3软件体系结构风格软件体系结构风格软件体系结构风格软件体系结构风格7.47.4设计模式设计模式设计模式设计模式内容内容7.1基本概念基本概念2基本概念基本概念n软件设计模式:软件设计模式:广义定义:可解决一类软件问题并能重广义定义:可解决一类软件问题并能重复使用的软件设计方案复使用的软件设计方案狭义定义:设计模式是对被用来在特定狭义定义:设计模式是对被用来在特定场景下解决一般设计问题的类和相互通场景下解决一般设计问题的类和相互通信的对象的描述。是在类和对象的层次信的对象的描述。是在类和对象的层次描述的可重复使用的软件设计问题解决描述的可重复使用的软件设计问题解决方案。方案。基本概念基本概念软软件件设计设计模式:模式:3基本概念基本概念n软件体系结构风格:是在构件和连接子的层次所描软件体系结构风格:是在构件和连接子的层次所描述的可重复使用的软件设计问题解决方案。述的可重复使用的软件设计问题解决方案。基本概念基本概念软软件体系件体系结结构构风风格:是在构件和格:是在构件和连连接子的接子的层层次所描述的可重次所描述的可重4基本概念基本概念n二者的共性和区别:二者的共性和区别:区别:区别:1 1、设计模式是在类和对象的层次描述问题,、设计模式是在类和对象的层次描述问题,粒度较小;粒度较小;2 2、体系结构风格是在构件和连接子的层次描、体系结构风格是在构件和连接子的层次描 述问题,粒度较大。体系结构风格是广义述问题,粒度较大。体系结构风格是广义 上的设计模式。上的设计模式。共性:都是可重复使用的软件设计问题解决方案共性:都是可重复使用的软件设计问题解决方案基本概念二者的共性和区基本概念二者的共性和区别别:共性:都是可重复使用的:共性:都是可重复使用的软软件件设计问题设计问题5内容内容1.11.1基本概念基本概念基本概念基本概念1.21.2软件体系结构描述语言软件体系结构描述语言软件体系结构描述语言软件体系结构描述语言1.31.3软件体系结构风格软件体系结构风格软件体系结构风格软件体系结构风格1.41.4设计模式设计模式设计模式设计模式内容内容1.1基本概念基本概念6软件体系结构描述语言软件体系结构描述语言n软件体系结构描述语言软件体系结构描述语言Architectural Description LanguageArchitectural Description Language,简称,简称ADLADL是用来描述软件密集型系统的总体结构的语言,说明是用来描述软件密集型系统的总体结构的语言,说明系统众多部件之间的结构关系。系统众多部件之间的结构关系。n代表性的体系结构描述语言代表性的体系结构描述语言nWrightWrightnRapideRapidenDarwinDarwinnUniconUniconnACMEACMEnABC/ADLABC/ADLnXYZ/ADLXYZ/ADLnXADLXADL大部分结构描述语言都有构件、连接子、配置等概念大部分结构描述语言都有构件、连接子、配置等概念软软件体系件体系结结构描述构描述语语言言软软件体系件体系结结构描述构描述语语言言WrightACME7软件体系结构描述语言软件体系结构描述语言nWright ADLWright ADL构件(构件(ComponentComponent)连接子(连接子(ConnectorConnector)端口(端口(PortsPorts)构件规范(构件规范(Component-specComponent-spec)计算(计算(ComputationComputation)配置(配置(ConfigurationConfiguration)角色(角色(RolesRoles)粘连(粘连(GlueGlue)实例(实例(InstancesInstances)联接(联接(AttachmentsAttachments)软软件体系件体系结结构描述构描述语语言言Wright ADL8Wright ADLWright ADLn过程调用实例:过程调用实例:一个一个CallerCaller类型的构件类型的构件c c通过通过D-C-connectorD-C-connector类型类型的的 连接子连接子dcdc调用调用DefinerDefiner类型的构件类型的构件d d c 调用调用 dWright ADL过过程程调调用用实实例:例:c 调调用用 d9调用实例的调用实例的Wright体系结构描述体系结构描述调调用用实实例的例的Wright体系体系结结构描述构描述10图形化的体系结构描述语言图形化的体系结构描述语言GADLGADLnGADLGADL的元模型的元模型图图形化的体系形化的体系结结构描述构描述语语言言GADLGADL的元模型的元模型11图形化的体系结构描述语言图形化的体系结构描述语言GADLGADL调用实例的调用实例的GADLGADL体系结构描述体系结构描述构件图构件图构件构件连接子连接子端口端口角色角色图图形化的体系形化的体系结结构描述构描述语语言言GADL调调用用实实例的例的GADL体系体系结结构描构描12图形化的体系结构描述语言图形化的体系结构描述语言GADLGADL调用实例的调用实例的GADLGADL体系结构描述体系结构描述类图类图图图形化的体系形化的体系结结构描述构描述语语言言GADL调调用用实实例的例的GADL体系体系结结构描构描13图形化的体系结构描述语言图形化的体系结构描述语言GADLGADLn一个图形化的体系结构描述语言一个图形化的体系结构描述语言GADLGADL调用实例的调用实例的GADLGADL体系结构描述体系结构描述协议类图和顺协议类图和顺序图序图图图形化的体系形化的体系结结构描述构描述语语言言GADL一个一个图图形化的体系形化的体系结结构描述构描述语语言言14WrightWright与与GADLGADLnGADLGADL语言用构件图、类图、顺序图等方式描述系语言用构件图、类图、顺序图等方式描述系统的软件体系结构,对行为的描述统的软件体系结构,对行为的描述GADLGADL用顺序图,用顺序图,而而WrightWright用进行代数用进行代数CSPCSP。Wright与与GADLGADL语语言用构件言用构件图图、类图类图、顺顺序序图图等方等方15内容内容1.11.1基本概念基本概念基本概念基本概念1.21.2软件体系结构描述语言软件体系结构描述语言软件体系结构描述语言软件体系结构描述语言1.31.3软件体系结构风格软件体系结构风格软件体系结构风格软件体系结构风格1.41.4设计模式设计模式设计模式设计模式内容内容1.1基本概念基本概念16软件体系结构风格软件体系结构风格n在构件和连接子的层次上描述的可重复使用的软在构件和连接子的层次上描述的可重复使用的软件设计问题解决方案。件设计问题解决方案。1.1.管道管道/过滤器风格过滤器风格2.2.层次风格层次风格3.3.客户客户/服务器风格服务器风格核心特征、应用场景、注意的问题核心特征、应用场景、注意的问题软软件体系件体系结结构构风风格在构件和格在构件和连连接子的接子的层层次上描述的可重复使用的次上描述的可重复使用的软软件件17(1 1)管道)管道/过滤器风格过滤器风格n实例剖析:实例剖析:统计统计a.txta.txt中单词的个数并打印出来:中单词的个数并打印出来:shellshell命令:命令:“cat a.txt|wc-w|lpr”“cat a.txt|wc-w|lpr”1、cat命令输出命令输出a.txt的内容的内容2、通过管道传给命令、通过管道传给命令wc,统计输入流中单词的,统计输入流中单词的 个数并输出个数并输出3、输出的单词数通过管道传给命令、输出的单词数通过管道传给命令lpr,lpr将其将其 打印出来打印出来 构件图构件图命令是构件、管道是连接子命令是构件、管道是连接子(1)管道)管道/过滤过滤器器风风格格实实例剖析:例剖析:1、cat命令命令输输出出a.txt18(1 1)管道)管道/过滤器风格过滤器风格n实例剖析:实例剖析:shellshell命令:命令:“cat a.txt|wc-w|lpr”“cat a.txt|wc-w|lpr”类类图图(1)管道)管道/过滤过滤器器风风格格实实例剖析:例剖析:类图类图19(1 1)管道)管道/过滤器风格过滤器风格n实例剖析:实例剖析:shellshell命令:命令:“cat a.txt|wc-w|lpr”“cat a.txt|wc-w|lpr”WriteData协议类图和顺序图协议类图和顺序图(1)管道)管道/过滤过滤器器风风格格实实例剖析:例剖析:WriteData协议类图协议类图和和20(1 1)管道)管道/过滤器风格过滤器风格n实例剖析:实例剖析:shellshell命令:命令:“cat a.txt|wc-w|lpr”“cat a.txt|wc-w|lpr”ReadData协议类图和顺序图协议类图和顺序图(1)管道)管道/过滤过滤器器风风格格实实例剖析:例剖析:ReadData协议类图协议类图和和顺顺21(1 1)管道)管道/过滤器风格过滤器风格n实例剖析:实例剖析:打印打印a.txta.txt中中softsoft的个数的个数“cat a.txt|grep-o soft|wc-w|lpr”“cat a.txt|grep-o soft|wc-w|lpr”构件图构件图(1)管道)管道/过滤过滤器器风风格格实实例剖析:构件例剖析:构件图图22(1 1)管道)管道/过滤器风格过滤器风格n特征:系统中构件之间通过数据流松散耦合。也特征:系统中构件之间通过数据流松散耦合。也就是说,构件之间的依赖仅仅是数据流,而不是就是说,构件之间的依赖仅仅是数据流,而不是通常的接口函数调用或消息传递。通常的接口函数调用或消息传递。n其他典型应用:编译器、信号处理等。其他典型应用:编译器、信号处理等。n其他说明:本模式在实现上可以有许多不同的变其他说明:本模式在实现上可以有许多不同的变化,如主动与被动、多出口管道等。化,如主动与被动、多出口管道等。(1)管道)管道/过滤过滤器器风风格特征:系格特征:系统统中构件之中构件之间间通通过过数据流松散耦合数据流松散耦合23(2 2)层次风格)层次风格n实例剖析:数据库系统实例剖析:数据库系统用户接口(查询、创建等)用户接口(查询、创建等)数据库管理数据库管理数据库文件(文件管理功能)数据库文件(文件管理功能)文件管理文件管理外部设备(设备管理功能)外部设备(设备管理功能)设备管理设备管理(2)层层次次风风格格实实例剖析:数据例剖析:数据库库系系统统用用户户接口(接口(查询查询、创创建等)建等)24(2 2)层次风格)层次风格n实例剖析:数据库系统实例剖析:数据库系统数据库服务端口数据库服务端口db(2)层层次次风风格格实实例剖析:数据例剖析:数据库库系系统统数据数据库库服服务务端口端口db25(2 2)层次风格)层次风格n特征:从向外提供服务的构件出发,沿着连接关特征:从向外提供服务的构件出发,沿着连接关系递次搜索各构件和连接子,如果形成的拓扑结系递次搜索各构件和连接子,如果形成的拓扑结构是一个有向无圈图(典型情况下是一个线性结构是一个有向无圈图(典型情况下是一个线性结构),那么这个系统的体系结构风格就是层次式构),那么这个系统的体系结构风格就是层次式的。的。n这种设计风格便于将复杂的系统进行分解;同时这种设计风格便于将复杂的系统进行分解;同时也便于构件替换:只要保持接口一致,就可以将也便于构件替换:只要保持接口一致,就可以将某一层的软件替换掉,而不会影响到系统的其他某一层的软件替换掉,而不会影响到系统的其他部分。部分。(2)层层次次风风格特征:从向外提供服格特征:从向外提供服务务的构件出的构件出发发,沿着,沿着连连接关系接关系递递26(2 2)层次风格)层次风格n其他典型应用:开放系统互联(其他典型应用:开放系统互联(OSIOSI)七层网络模)七层网络模型、型、Windows NTWindows NT操作系统的内核结构。操作系统的内核结构。(2)层层次次风风格其他典型格其他典型应应用:开放系用:开放系统统互互联联(OSI)七)七层层网网络络模模27第第7章章-软软件体系件体系结结构构风风格与格与设计设计模式模式课课件件28(2 2)层次风格)层次风格n其他说明:其他说明:优点是结构清晰、可替换性好、便于控制复杂优点是结构清晰、可替换性好、便于控制复杂性;性;但也有它的缺点,如效率低:分层结构中高层但也有它的缺点,如效率低:分层结构中高层的数据要经过层层传递和转发,从而降低系统的数据要经过层层传递和转发,从而降低系统效率。效率。(2)层层次次风风格其他格其他说说明:明:29(3 3)客户)客户/服务器风格服务器风格n实例剖析:实例剖析:FTPFTP系统系统(3)客)客户户/服服务务器器风风格格实实例剖析:例剖析:FTP系系统统30(3 3)客户)客户/服务器风格服务器风格n特征:从向外提供服务的构件出发,沿着连接关特征:从向外提供服务的构件出发,沿着连接关系递次搜索各构件和连接子,如果形成的拓扑结系递次搜索各构件和连接子,如果形成的拓扑结构是一棵倒置的树,那么这个系统的体系结构就构是一棵倒置的树,那么这个系统的体系结构就是客户是客户/服务器风格的。服务器风格的。n这种风格使得服务功能的实现很集中,便于系统这种风格使得服务功能的实现很集中,便于系统实现,因而得到广泛使用。实现,因而得到广泛使用。(3)客)客户户/服服务务器器风风格特征:从向外提供服格特征:从向外提供服务务的构件出的构件出发发,沿着,沿着连连31(3 3)客户)客户/服务器风格服务器风格n其他典型应用:电子邮件系统、其他典型应用:电子邮件系统、WWWWWW系统、系统、TELNETTELNET系统、系统、CVSCVS版本控制系统等版本控制系统等(3)客)客户户/服服务务器器风风格其他典型格其他典型应应用:用:电电子子邮邮件系件系统统、WWW系系统统32数据库服务器可以向多个浏数据库服务器可以向多个浏览器实例提供服务、还可以览器实例提供服务、还可以向向CVS系统提供服务。系统提供服务。数据数据库库服服务务器可以向多个器可以向多个浏览浏览器器实实例提供服例提供服务务、还还可以向可以向CVS系系统统33(3 3)客户)客户/服务器风格服务器风格n其他说明:在客户其他说明:在客户/服务器风格的系统中,服务器是资源服务器风格的系统中,服务器是资源和计算的集中地,因此容易成为存储和计算瓶颈,实际应和计算的集中地,因此容易成为存储和计算瓶颈,实际应用中为了提高服务器的性能,可能要采用集群处理等办法。用中为了提高服务器的性能,可能要采用集群处理等办法。同时,这个特点也使得这类系统容易遭受拒绝服务(同时,这个特点也使得这类系统容易遭受拒绝服务(Deny Deny Of ServiceOf Service)攻击,因此在设计和应用中要作针对性考虑。)攻击,因此在设计和应用中要作针对性考虑。n此外,在这种风格的系统中,服务器中往往要存储更多客此外,在这种风格的系统中,服务器中往往要存储更多客户的状态信息,因此大量使用并发执行技术,如多进程、户的状态信息,因此大量使用并发执行技术,如多进程、多线程等,这也就涉及到进程、线程的动态创建、调度、多线程等,这也就涉及到进程、线程的动态创建、调度、删除等问题。这些问题处理得好坏直接影响到服务器的性删除等问题。这些问题处理得好坏直接影响到服务器的性能。能。(3)客)客户户/服服务务器器风风格其他格其他说说明:在客明:在客户户/服服务务器器风风格的系格的系统统中,中,34内容内容1.11.1基本概念基本概念基本概念基本概念1.21.2软件体系结构描述语言软件体系结构描述语言软件体系结构描述语言软件体系结构描述语言1.31.3软件体系结构风格软件体系结构风格软件体系结构风格软件体系结构风格1.41.4设计模式设计模式设计模式设计模式内容内容1.1基本概念基本概念35设计模式设计模式n文献文献7-27-2中描述了中描述了2323个设计模式,并将它们分为个设计模式,并将它们分为三种类型:创建型设计模式、结构型设计模式和三种类型:创建型设计模式、结构型设计模式和行为型设计模式。行为型设计模式。设计设计模式文献模式文献7-2中描述了中描述了23个个设计设计模式,并将它模式,并将它们们分分为为三三36设计模式设计模式1.1.Factory MethodFactory Method(工厂方法)(工厂方法)2.2.Abstract FactoryAbstract Factory(抽象工厂)(抽象工厂)3.3.SingletonSingleton(单件)(单件)4.4.CompositeComposite(组合)(组合)5.5.ProxyProxy(代理)(代理)6.6.IteratorIterator(迭代器)(迭代器)7.7.Observer Observer(观察者)(观察者)动机和实例、应用场合、结构、核心思想动机和实例、应用场合、结构、核心思想设计设计模式模式Factory Method(工厂方法)(工厂方法)动动机和机和实实例、例、37(1)Factory Method(1)Factory Methodn动机与实例:动机与实例:“龙珠龙珠”游戏游戏魔力管道:魔力管道:弹球(弹球(pop)制造球(制造球(Enchant)球球(1)Factory Method动动机与机与实实例:例:“龙龙珠珠”游游戏戏38(1)Factory Method(1)Factory Methodn动机与实例:动机与实例:“龙珠龙珠”游戏游戏-设计设计1 1球有多种,如皮球、钢球球有多种,如皮球、钢球BallBall抽象父类抽象父类BallBall无法被实例化无法被实例化?(1)Factory Method动动机与机与实实例:例:“龙龙珠珠”游游戏戏39(1)Factory Method(1)Factory Methodn动机与实例:动机与实例:“龙珠龙珠”游戏游戏-设计设计2 2new Ballnew Ball动作包装成虚函数动作包装成虚函数MakeBallFactoryMethodMakeBallFactoryMethod在子类(描述各种魔力管道)中重新定义该虚函数在子类(描述各种魔力管道)中重新定义该虚函数(1)Factory Method动动机与机与实实例:例:“龙龙珠珠”游游戏戏40(1)Factory Method(1)Factory Methodn适用场合:有一些实体(各种魔力管道),它们适用场合:有一些实体(各种魔力管道),它们的结构和行为是相似的,且都包含一些相似的更的结构和行为是相似的,且都包含一些相似的更小实体(各类球),但一个大实体内部的这些小小实体(各类球),但一个大实体内部的这些小实体都是同一类的(一种魔力管道内只有一种球)实体都是同一类的(一种魔力管道内只有一种球)。此时,如果各类小实体的描述构成一个类层次,。此时,如果各类小实体的描述构成一个类层次,那么可使用那么可使用Factory MethodFactory Method模式,将各类大实体模式,将各类大实体也描述为一个类层次。也描述为一个类层次。(1)Factory Method适用适用场场合:有一些合:有一些实实体(各体(各41(1)Factory Method(1)Factory Methodn结构:结构:(1)Factory Method结结构:构:42(1)Factory Method(1)Factory Methodn核心思想归纳:在父类中,将创建对象的操作包核心思想归纳:在父类中,将创建对象的操作包装为一个虚函数,在描述公共行为的过程中调用装为一个虚函数,在描述公共行为的过程中调用该函数;在子类中重定义该虚函数来定制创建的该函数;在子类中重定义该虚函数来定制创建的对象,从而间接定制公共行为。利用虚函数的多对象,从而间接定制公共行为。利用虚函数的多态机制,态机制,Factory MethodFactory Method模式使得父类可集中描模式使得父类可集中描述公共行为,而将特别行为(不同对象的创建)述公共行为,而将特别行为(不同对象的创建)抽放于子类。抽放于子类。(1)Factory Method核心思想核心思想归纳归纳:在父:在父类类中,中,43(2)(2)Abstract FactoryAbstract Factoryn动机与实例:魔力管道。动机与实例:魔力管道。在前面的设计中,三个在前面的设计中,三个MakeBallFactoryMethodMakeBallFactoryMethod工工厂方法散放在三个厂方法散放在三个MagicPipeMagicPipe类中。为了降低复杂类中。为了降低复杂性,可以把所有的创建动作拆分出来单独考虑。性,可以把所有的创建动作拆分出来单独考虑。即:创建球的动作单独形成一个工厂类,专门创即:创建球的动作单独形成一个工厂类,专门创建对象。建对象。(2)Abstract Factory动动机与机与实实例:魔力管道例:魔力管道44(2)(2)Abstract FactoryAbstract Factoryn动机与实例:设计动机与实例:设计3 3(2)Abstract Factory动动机与机与实实例:例:设计设计345(2)(2)Abstract FactoryAbstract Factoryn动机与实例:设计动机与实例:设计4 4不仅有球、还有盒子等小实体,不仅有球、还有盒子等小实体,抽象工厂类专门创建各种小实体抽象工厂类专门创建各种小实体(2)Abstract Factory动动机与机与实实例:例:设计设计4不不46(2)(2)Abstract FactoryAbstract Factoryn动机与实例:设计动机与实例:设计5 5混合管道和小实体混合管道和小实体(2)Abstract Factory动动机与机与实实例:例:设计设计5混混47(2)(2)Abstract FactoryAbstract Factoryn适用场合:当需要创建一组多种风格的小实体、适用场合:当需要创建一组多种风格的小实体、且具体创建方式又要灵活可调整时,可使用且具体创建方式又要灵活可调整时,可使用Abstract FactoryAbstract Factory模式,将公共的创建行为描述模式,将公共的创建行为描述为一个抽象类,而将具体的创建方式用该抽象类为一个抽象类,而将具体的创建方式用该抽象类的子类来描述。的子类来描述。(2)Abstract Factory适用适用场场合:当需要合:当需要创创建建48(2)(2)Abstract FactoryAbstract Factoryn结构:结构:(2)Abstract Factory结结构:构:49(2)(2)Abstract FactoryAbstract Factoryn核心思想归纳:为了提供灵活性,将需要创建的核心思想归纳:为了提供灵活性,将需要创建的同一风格的一组小实体的一般特征提取出来,用同一风格的一组小实体的一般特征提取出来,用一组抽象产品类来描述,同时将创建行为封装为一组抽象产品类来描述,同时将创建行为封装为一个抽象工厂类,提供通用的创建接口,而将各一个抽象工厂类,提供通用的创建接口,而将各种具体的产品和具体的创建行为用抽象产品类和种具体的产品和具体的创建行为用抽象产品类和抽象工厂类的子类来描述。从而使得抽象工厂类的子类来描述。从而使得BigEntityBigEntity和和具体的产品特性和具体的创建行为隔离开来,既具体的产品特性和具体的创建行为隔离开来,既降低了耦合度,也使得灵活调整创建行为成为可降低了耦合度,也使得灵活调整创建行为成为可能。能。(2)Abstract Factory核心思想核心思想归纳归纳:为为了提了提50(3)(3)SingletonSingletonn动机与实例:日志功能,在一个应用程序内部一动机与实例:日志功能,在一个应用程序内部一般只需要一个日志实例即可。般只需要一个日志实例即可。实现方案实现方案1 1公有的构造函数公有的构造函数(3)Singleton动动机与机与实实例:日志功能,在一个例:日志功能,在一个应应用程用程51(3)(3)SingletonSingleton实现方案实现方案1 1全局变量全局变量(3)Singleton实现实现方案方案1全局全局变变量量52(3)(3)SingletonSingletonn实现方案实现方案1 1需要日志的地方直接使用变量需要日志的地方直接使用变量g_log和相关接口函数和相关接口函数(3)Singleton实现实现方案方案1需要日志的地方直接使用需要日志的地方直接使用变变53(3)(3)SingletonSingletonn实现方案实现方案1 1:两个缺陷:两个缺陷一般情况下(如果只有一个日志文件)一般情况下(如果只有一个日志文件)只需要一个只需要一个LogLog实例即可,但上述做法不实例即可,但上述做法不能保证能保证LogLog的实例只有一个,当多个实例的实例只有一个,当多个实例设置相同的日志文件的时候,还可能引设置相同的日志文件的时候,还可能引起冲突;起冲突;这种做法使得这种做法使得g_logg_log无论用到与否都要被无论用到与否都要被创建。创建。(3)Singleton实现实现方案方案1:两个缺陷:两个缺陷54(3)(3)SingletonSingletonn实现方案实现方案2 2:使用:使用SingletonSingleton模式模式私有静态成员变量,私有静态成员变量,代替全局变量,指向代替全局变量,指向log唯一实例唯一实例构造函数变为构造函数变为protected不可能在类外部创建实例不可能在类外部创建实例静态私有函数代替全局变量,静态私有函数代替全局变量,获取实例指针获取实例指针(3)Singleton实现实现方案方案2:使用:使用Singleton55(3)(3)SingletonSingletonn实现方案实现方案2 2:使用:使用SingletonSingleton模式模式#include“log.h”Log*log:theOnlyInstance=0;Log*Log:getInstance()If(!theOnlyInstance)theOnlyInstance=new Log();Return theOnlyInstance;初始化为初始化为0静态成员函数静态成员函数getInstance返回返回theOnlyInstance的值的值(3)Singleton实现实现方案方案2:使用:使用Singleton56(3)(3)SingletonSingletonn实现方案实现方案2 2:使用:使用SingletonSingleton模式模式#include“log.h”Void main()Log *plog=Log:getInstance();需要日志时,需要日志时,调用静态成员函数调用静态成员函数getInstance值值(3)Singleton实现实现方案方案2:使用:使用Singleton57(3)(3)SingletonSingletonn适用场合:当需要确保一个类最多只有一个实例适用场合:当需要确保一个类最多只有一个实例时,使用本模式。时,使用本模式。(3)Singleton适用适用场场合:当需要确保一个合:当需要确保一个类类最多只有最多只有58(3)(3)SingletonSingletonn结构:设需要保证只有一个实例的类为结构:设需要保证只有一个实例的类为SingletonSingleton,则类,则类SingletonSingleton的定义为:的定义为:(3)Singleton结结构:构:设设需要保需要保证证只有一个只有一个实实例的例的类为类为59(3)(3)SingletonSingletonn结构:类结构:类SingletonSingleton的实现为:的实现为:(3)Singleton结结构:构:类类Singleton的的实现为实现为60(3)(3)SingletonSingletonn核心思想归纳:通过将一个类的构造函数设置为核心思想归纳:通过将一个类的构造函数设置为protectedprotected或或privateprivate,可有效阻止从外部直接创,可有效阻止从外部直接创建该类的实例;同时设置一个静态成员函数,以建该类的实例;同时设置一个静态成员函数,以负责创建唯一的实例并向外提供访问接口。负责创建唯一的实例并向外提供访问接口。(3)Singleton核心思想核心思想归纳归纳:通:通过过将一个将一个类类的构造函的构造函61(4)(4)CompositeCompositen动机与实例:幻灯片制作软件。一张幻灯片上可动机与实例:幻灯片制作软件。一张幻灯片上可以有各种图元对象:文本框、图形、图像、影片、以有各种图元对象:文本框、图形、图像、影片、声音等等。图元具有声音等等。图元具有“递归组合递归组合”特性。特性。(4)Composite动动机与机与实实例:幻灯片制作例:幻灯片制作软软件。一件。一张张幻幻62(4)(4)CompositeCompositen适用场合:当需要描述的对象具有适用场合:当需要描述的对象具有“递归组合递归组合”特征、且希望用户忽略基本对象与组合对象的区特征、且希望用户忽略基本对象与组合对象的区别时,适用本模式。别时,适用本模式。n结构:结构:(4)Composite适用适用场场合:当需要描述的合:当需要描述的对对象具有象具有“递递63(4)(4)CompositeCompositen核心思想归纳:为基本对象和组合对象提供一个核心思想归纳:为基本对象和组合对象提供一个公共的抽象父类,以表示所有对象,并建立起从公共的抽象父类,以表示所有对象,并建立起从该抽象父类到组合对象类的聚集关联,从而间接该抽象父类到组合对象类的聚集关联,从而间接建立起建立起“递归组合递归组合”特性。特性。(4)Composite核心思想核心思想归纳归纳:为为基本基本对对象和象和组组合合对对象象64(5)(5)ProxyProxyn动机与实例:网络中间件。在这类程序中,实际工作的对动机与实例:网络中间件。在这类程序中,实际工作的对象可能运行在远程的主机上,与客户端应用分别处于不同象可能运行在远程的主机上,与客户端应用分别处于不同的地址空间。为了编程方便,在其中大量地使用了的地址空间。为了编程方便,在其中大量地使用了ProxyProxy模式。建立一个模式。建立一个ProxyProxy对象:它与对象:它与ServerServer对象的接口是一对象的接口是一样的,而且与样的,而且与ClientClient对象位于同一台机器、同一地址空间对象位于同一台机器、同一地址空间中,所有发给它的操作请求最终都转发中,所有发给它的操作请求最终都转发ServerServer对象。给使对象。给使ClientClient对象的设计开发变得简单,就像本地编程一样,网对象的设计开发变得简单,就像本地编程一样,网络交互的许多细节则集中到络交互的许多细节则集中到ProxyProxy对象的实现中。对象的实现中。(5)Proxy动动机与机与实实例:网例:网络络中中间间件。在件。在这类这类程序中,程序中,实际实际65(5)(5)ProxyProxyn适用场合:适用场合:1.1.前面的例子中使用前面的例子中使用ProxyProxy模式是为了屏蔽网络交互细模式是为了屏蔽网络交互细节、透明进行远程访问,因此属于节、透明进行远程访问,因此属于“远程代理远程代理”;2.2.还有一些场合是为了提高性能、降低开销,而设置一还有一些场合是为了提高性能、降低开销,而设置一个个“虚代理虚代理”,如文档文件中的图像代理,它只描述,如文档文件中的图像代理,它只描述图像的位置、大小等基本信息,具体图像文件细节仅图像的位置、大小等基本信息,具体图像文件细节仅在需要时再创建一个真正的图像对象来描述;在需要时再创建一个真正的图像对象来描述;3.3.另外,当被访问对象的内部结构很复杂且需要进行智另外,当被访问对象的内部结构很复杂且需要进行智能的分析、决策和协调时,可使用能的分析、决策和协调时,可使用“智能代理智能代理”来屏来屏蔽这些智能决策的细节,如一个蔽这些智能决策的细节,如一个“订票订票”代理就是如代理就是如此:它可根据多家航空公司的订票服务,智能选择一此:它可根据多家航空公司的订票服务,智能选择一种符合用户要求的订票方案。种符合用户要求的订票方案。(5)Proxy适用适用场场合:合:66(5)(5)ProxyProxyn结构结构(5)Proxy结结构构67(5)(5)ProxyProxyn核心思想归纳:构造一个具有相同接口的代理核心思想归纳:构造一个具有相同接口的代理对象,然后将操作请求转发给真实对象,其目对象,然后将操作请求转发给真实对象,其目的是向客户隐藏的是向客户隐藏“转发过程转发过程”的细节(如远程的细节(如远程网络交互、智能决策、选择性转发等),提供网络交互、智能决策、选择性转发等),提供对真实对象的透明访问。对真实对象的透明访问。(5)Proxy核心思想核心思想归纳归纳:构造一个具有相同接口的代理:构造一个具有相同接口的代理对对68(6)(6)IteratorIteratorn动机与实例:支持遍历的列表设计。动机与实例:支持遍历的列表设计。设计方案设计方案1 1内部迭代内部迭代外部迭代外部迭代(6)Iterator动动机与机与实实例:支持遍例:支持遍历历的列表的列表设计设计。内部。内部69(6)(6)IteratorIteratorn动机与实例:支持遍历的列表设计。动机与实例:支持遍历的列表设计。设计方案设计方案1 1的问题:的问题:1.1.其一,这种设计只能描述一种遍历方式,如向前遍历其一,这种设计只能描述一种遍历方式,如向前遍历或向后遍历,但不能同时描述多种遍历方式。或许,或向后遍历,但不能同时描述多种遍历方式。或许,大家觉得只需要再向大家觉得只需要再向ListList里面增加一些表示遍历的接里面增加一些表示遍历的接口函数和表示位置的成员变量即可,但这样一来众多口函数和表示位置的成员变量即可,但这样一来众多关系不紧密的功能混放在一个类里,会使得内聚程度关系不紧密的功能混放在一个类里,会使得内聚程度变低,容易导致类膨胀,同时也给函数命名等带来不变低,容易导致类膨胀,同时也给函数命名等带来不便。便。2.2.其二,这种设计不支持在一个列表上同时进行多个相其二,这种设计不支持在一个列表上同时进行多个相同类型的遍历(如都是向后遍历,只是对元素的处理同类型的遍历(如都是向后遍历,只是对元素的处理方式不同),而这种情况可能出现在并行程序中。方式不同),而这种情况可能出现在并行程序中。(6)Iterator动动机与机与实实例:支持遍例:支持遍历历的列表的列表设计设计。70(6)(6)IteratorIteratorn设计方案设计方案2 2:在一个列表上同时进行多个相同类型的遍历。在一个列表上同时进行多个相同类型的遍历。使用使用IteratorIterator模式,将负责遍历的部分功能从模式,将负责遍历的部分功能从ListList中分离中分离出来,单独形成一个类出来,单独形成一个类ListIteratorListIterator(6)Iterator设计设计方案方案2:71(6)(6)IteratorIteratorn设计方案设计方案2 2:在一个列表上同时进行多个相同类型的遍历在一个列表上同时进行多个相同类型的遍历Class ListIteratorPrivate:const List *list;ListIterator增加指向原增加指向原列表的指针。因此,一列表的指针。因此,一个个ListIterator实例记录实例记录了与列表的一次遍历相了与列表的一次遍历相关的所有信息,通过定关的所有信息,通过定义义ListIterator的多个实的多个实例变量,就可以在一个例变量,就可以在一个列表上同时进行多个相列表上同时进行多个相同类型的遍历。同类型的遍历。(6)Iterator设计设计方案方案2:Class ListIt72(6)(6)IteratorIteratorn设计方案设计方案3 3:以多种方式遍历一个列表,再定义一个迭代器类型以多种方式遍历一个列表,再定义一个迭代器类型(6)Iterator设计设计方案方案3:73(6)(6)IteratorIteratorn适用场合:当需要以多种方式灵活地遍历一个聚适用场合:当需要以多种方式灵活地遍历一个聚合对象中的各个元素时,适用本模式。合对象中的各个元素时,适用本模式。n结构:结构:(6)Iterator适用适用场场合:当需要以多种方式灵活地遍合:当需要以多种方式灵活地遍历历74(6)(6)IteratorIteratorn核心思想归纳:通过将与遍历有关的部分从聚合核心思想归纳:通过将与遍历有关的部分从聚合对象的描述中分离出来、单独成类,能够将遍历对象的描述中分离出来、单独成类,能够将遍历的状态信息用一个独立对象记录,从而可有效处的状态信息用一个独立对象记录,从而可有效处理多种遍历和并发遍历。另外,本模式可与理多种遍历和并发遍历。另外,本模式可与Factory MethodFactory Method模式配合使用,支持从聚合对象模式配合使用,支持从聚合对象直接创建相应的聚合器。直接创建相应的聚合器。(6)Iterator核心思想核心思想归纳归纳:通:通过过将与遍将与遍历历有关的部分有关的部分75(7)(7)ObserverObservern动机与实例:动机与实例:WordWord软件的软件的“窗口拆分窗口拆分”功能。功能。(7)Observer动动机与机与实实例:例:Word软软件的件的“窗口拆分窗口拆分76(7)(7)ObserverObservern动机与实例:动机与实例:WordWord软件的软件的“窗口拆分窗口拆分”功能。功能。(7)Observer动动机与机与实实例:例:Word软软件的件的“窗口拆分窗口拆分77(7)(7)ObserverObservern动机与实例:动机与实例:WordWord软件的软件的“窗口拆分窗口拆分”功能。功能。(7)Observer动动机与机与实实例:例:Word软软件的件的“窗口拆分窗口拆分78(7)(7)ObserverObservern动机与实例:动机与实例:WordWord软件的软件的“窗口拆分窗口拆分”功能。功能。(7)Observer动动机与机与实实例:例:Word软软件的件的“窗口拆分窗口拆分79(7)(7)ObserverObservern适用场合:如果对象之间存在一对多的数据依赖关系、适用场合:如果对象之间存在一对多的数据依赖关系、且当被依赖对象的数据改变时所有依赖于它的对象都应且当被依赖对象的数据改变时所有依赖于它的对象都应得到通知并自动更新,那么可使用本模式。被依赖的对得到通知并自动更新,那么可使用本模式。被依赖的对象称为发布者,负责发布数据并通知所有的订阅者(即象称为发布者,负责发布数据并通知所有的订阅者(即依赖于该发布者的对象),以便订阅者与发布者的状态依赖于该发布者的对象),以便订阅者与发布者的状态保持一致。保持一致。n前面的例子中,前面的例子中,DocumentDocument对象为发布者,而对象为发布者,而WindowWindow对象对象为订阅者。因此,本模式也称为发布为订阅者。因此,本模式也称为发布-订阅(订阅(Publish-Publish-SubscribeSubscribe)模式。订阅者也可称为观察者)模式。订阅者也可称为观察者(ObserverObserver),它似乎在时刻观察发布者的状态,并及),它似乎在时刻观察发布者的状态,并及时更新自己。时更新自己。(7)Observer适用适用场场合:如果合:如果对对象之象之间间存在一存在一对对多的数多的数80(7)(7)ObserverObservern结构:结构:(7)Observer结结构:构:81(7)(7)ObserverObservern核心思想归纳:对象是对数据和函数的封装,核心思想归纳:对象是对数据和函数的封装,当一个类包含了太多的函数(或称操作)时,当一个类包含了太多的函数(或称操作)时,我们倾向于将其拆分为多个相互协作的类,每我们倾向于将其拆分为多个相互协作的类,每个协作类描述一部分行为、包含原来的一部分个协作类描述一部分行为、包含原来的一部分数据和函数,但这种拆分有一个副作用:因为数据和函数,但这种拆分有一个副作用:因为各协作对象很可能会共享部分数据,所以需要各协作对象很可能会共享部分数据,所以需要维护相关对象在数据上的一致性。通过使用维护相关对象在数据上的一致性。通过使用ObserverObserver模式,能够为相关对象制定一个交互模式,能够为相关对象制定一个交互协议,专门用作数据的一致性维护。协议,专门用作数据的一致性维护。(7)Observer核心思想核心思想归纳归纳:对对象是象是对对数据和函数的封数据和函数的封82精品课件精品课件!精品精品课课件!件!83精品课件精品课件!精品精品课课件!件!84第第7章章-软软件体系件体系结结构构风风格与格与设计设计模式模式课课件件85
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!