书签 分享 收藏 举报 版权申诉 / 81
上传文档赚钱

类型软件设计与体系结构第七章软件体系结构分隔与设计模课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3008585
  • 上传时间:2022-06-21
  • 格式:PPT
  • 页数:81
  • 大小:1.37MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《软件设计与体系结构第七章软件体系结构分隔与设计模课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    软件设计 体系结构 第七 软件 分隔 设计 课件
    资源描述:

    1、前言基本概念n软件设计模式:软件设计模式:广义定义:可解决一类软件问题并能重广义定义:可解决一类软件问题并能重复使用的软件设计方案复使用的软件设计方案狭义定义:设计模式是对被用来在特定狭义定义:设计模式是对被用来在特定场景下解决一般设计问题的类和相互通场景下解决一般设计问题的类和相互通信的对象的描述。是在类和对象的层次信的对象的描述。是在类和对象的层次描述的可重复使用的软件设计问题解决描述的可重复使用的软件设计问题解决方案。方案。基本概念n软件体系结构风格:是在构件和连接子的层次所描软件体系结构风格:是在构件和连接子的层次所描述的可重复使用的软件设计问题解决方案。述的可重复使用的软件设计问题解

    2、决方案。基本概念n二者的共性和区别:二者的共性和区别:区别:区别: 1、设计模式是在类和对象的层次描述问题,、设计模式是在类和对象的层次描述问题, 粒度较小;粒度较小;2、体系结构风格是在构件和连接子的层次描、体系结构风格是在构件和连接子的层次描 述问题,粒度较大。体系结构风格是广义述问题,粒度较大。体系结构风格是广义 上的设计模式。上的设计模式。共性:都是可重复使用的软件设计问题解决方案共性:都是可重复使用的软件设计问题解决方案软件体系结构描述语言n软件体系结构描述语言软件体系结构描述语言Architectural Description Language,简称,简称ADL是用来描述软件密集

    3、型系统的总体结构的语言,说明是用来描述软件密集型系统的总体结构的语言,说明系统众多部件之间的结构关系。系统众多部件之间的结构关系。n代表性的体系结构描述语言代表性的体系结构描述语言nWrightWrightnRapideRapidenDarwinDarwinnUniconUniconnACMEACMEnABC/ADLABC/ADLnXYZ/ADLXYZ/ADLnXADLXADL大部分结构描述语言都有构件、连接子、配置等概念大部分结构描述语言都有构件、连接子、配置等概念软件体系结构描述语言nWright ADL构件(构件(Component) 连接子(连接子(Connector) 端口(端口(P

    4、orts) 构件规范(构件规范(Component-spec) 计算(计算(Computation) 配置(配置(Configuration) 角色(角色(Roles) 粘连(粘连(Glue) 实例(实例(Instances) 联接(联接(Attachments) 软件体系结构描述语言-Wright ADLn过程调用实例:过程调用实例: 一个一个Caller类型的构件类型的构件c通过通过D-C-connector类型的类型的 连连接子接子dc调用调用Definer类型的构件类型的构件d c 调用调用 d软件体系结构描述语言调用实例的调用实例的Wright体系结构描述体系结构描述软件体系结构描述

    5、语言nGADL的元模型的元模型图形化的体系结构描述语言图形化的体系结构描述语言GADL软件体系结构描述语言图形化的体系结构描述语言图形化的体系结构描述语言GADL调用实例的调用实例的GADL体系结构描述体系结构描述构件图构件图构件构件连接子连接子端口端口角色角色软件体系结构描述语言调用实例的调用实例的GADL体系结构描述体系结构描述类图类图软件体系结构描述语言n一个图形化的体系结构描述语言一个图形化的体系结构描述语言GADL调用实例的调用实例的GADL体系结构描述体系结构描述协议类图和顺协议类图和顺序图序图软件体系结构描述语言nGADL语言用构件图、类图、顺序图等方式描述系语言用构件图、类图、

    6、顺序图等方式描述系统的软件体系结构,对行为的描述统的软件体系结构,对行为的描述GADL用顺序图用顺序图,而,而Wright用进行代数用进行代数CSP。软件体系结构风格n在构件和连接子的层次上描述的可重复使用的软在构件和连接子的层次上描述的可重复使用的软件设计问题解决方案。件设计问题解决方案。管道管道/过滤器风格过滤器风格层次风格层次风格客户客户/服务器风格服务器风格核心特征、应用场景、注意的问题核心特征、应用场景、注意的问题软件体系结构风格-管道/过滤器风格n实例剖析:实例剖析: 统计统计a.txt中单词的个数并打印出来:中单词的个数并打印出来:shell命令:命令:“cat a.txt |

    7、wc -w | lpr” 1、cat命令输出命令输出a.txt的内容的内容2、通过管道传给命令、通过管道传给命令wc,统计输入流中单词的,统计输入流中单词的 个数并输出个数并输出3、输出的单词数通过管道传给命令、输出的单词数通过管道传给命令lpr,lpr将其将其 打印出来打印出来 软件体系结构风格-管道/过滤器风格n实例剖析:实例剖析:shell命令:命令:“cat a.txt | wc -w | lpr” 软件体系结构风格-管道/过滤器风格n实例剖析:实例剖析:shell命令:命令:“cat a.txt | wc -w | lpr” WriteData协议类图和顺序图协议类图和顺序图软件体系

    8、结构风格-管道/过滤器风格n实例剖析:实例剖析:shell命令:命令:“cat a.txt | wc -w | lpr” ReadData协议类图和顺序图协议类图和顺序图软件体系结构风格-管道/过滤器风格n实例剖析:实例剖析: 打印打印a.txt中中soft的个数的个数“cat a.txt | grep -o soft | wc -w | lpr”构件图构件图软件体系结构风格-管道/过滤器风格n特征:系统中构件之间通过数据流松散耦合。也特征:系统中构件之间通过数据流松散耦合。也就是说,构件之间的依赖仅仅是数据流,而不是就是说,构件之间的依赖仅仅是数据流,而不是通常的接口函数调用或消息传递。通常

    9、的接口函数调用或消息传递。n其他典型应用:编译器、信号处理等。其他典型应用:编译器、信号处理等。n其他说明:本模式在实现上可以有许多不同的变其他说明:本模式在实现上可以有许多不同的变化,如主动与被动、多出口管道等。化,如主动与被动、多出口管道等。软件体系结构风格-层次风格n实例剖析:数据库系统实例剖析:数据库系统用户接口(查询、创建等)用户接口(查询、创建等) 数据库管理数据库管理数据库文件(文件管理功能)数据库文件(文件管理功能) 文件管理文件管理外部设备(设备管理功能)外部设备(设备管理功能) 设备管理设备管理软件体系结构风格-层次风格n实例剖析:数据库系统实例剖析:数据库系统数据库服务端

    10、口数据库服务端口db软件体系结构风格-层次风格n特征:从向外提供服务的构件出发,沿着连接关特征:从向外提供服务的构件出发,沿着连接关系递次搜索各构件和连接子,如果形成的拓扑结系递次搜索各构件和连接子,如果形成的拓扑结构是一个有向无圈图(典型情况下是一个线性结构是一个有向无圈图(典型情况下是一个线性结构),那么这个系统的体系结构风格就是层次式构),那么这个系统的体系结构风格就是层次式的。的。n这种设计风格便于将复杂的系统进行分解;同时这种设计风格便于将复杂的系统进行分解;同时也便于构件替换:只要保持接口一致,就可以将也便于构件替换:只要保持接口一致,就可以将某一层的软件替换掉,而不会影响到系统的

    11、其他某一层的软件替换掉,而不会影响到系统的其他部分。部分。 软件体系结构风格-层次风格n其他典型应用:开放系统互联(其他典型应用:开放系统互联(OSI)七层网络模)七层网络模型、型、Windows NT操作系统的内核结构。操作系统的内核结构。软件体系结构风格-层次风格软件体系结构风格-层次风格n其他说明:其他说明:优点是结构清晰、可替换性好、便于控制复杂优点是结构清晰、可替换性好、便于控制复杂性;性;但也有它的缺点,如效率低:分层结构中高层但也有它的缺点,如效率低:分层结构中高层的数据要经过层层传递和转发,从而降低系统的数据要经过层层传递和转发,从而降低系统效率。效率。 软件体系结构风格-客户

    12、/服务器风格n实例剖析:实例剖析:FTP系统系统软件体系结构风格-客户/服务器风格n特征:从向外提供服务的构件出发,沿着连接关特征:从向外提供服务的构件出发,沿着连接关系递次搜索各构件和连接子,如果形成的拓扑结系递次搜索各构件和连接子,如果形成的拓扑结构是一棵倒置的树,那么这个系统的体系结构就构是一棵倒置的树,那么这个系统的体系结构就是客户是客户/服务器风格的。服务器风格的。n这种风格使得服务功能的实现很集中,便于系统这种风格使得服务功能的实现很集中,便于系统实现,因而得到广泛使用。实现,因而得到广泛使用。 软件体系结构风格-客户/服务器风格n其他典型应用:电子邮件系统、其他典型应用:电子邮件

    13、系统、WWW系统、系统、TELNET系统、系统、CVS版本控制系统等版本控制系统等软件体系结构风格-客户/服务器风格数据库服务器可以向多个浏数据库服务器可以向多个浏览器实例提供服务、还可以览器实例提供服务、还可以向向CVS系统提供服务。系统提供服务。软件体系结构风格-客户/服务器风格n其他说明:在客户其他说明:在客户/服务器风格的系统中,服务器是资源服务器风格的系统中,服务器是资源和计算的集中地,因此容易成为存储和计算瓶颈,实际应和计算的集中地,因此容易成为存储和计算瓶颈,实际应用中为了提高服务器的性能,可能要采用集群处理等办法用中为了提高服务器的性能,可能要采用集群处理等办法。同时,这个特点

    14、也使得这类系统容易遭受拒绝服务(。同时,这个特点也使得这类系统容易遭受拒绝服务(Deny Of Service)攻击,因此在设计和应用中要作针对性)攻击,因此在设计和应用中要作针对性考虑。考虑。n此外,在这种风格的系统中,服务器中往往要存储更多客此外,在这种风格的系统中,服务器中往往要存储更多客户的状态信息,因此大量使用并发执行技术,如多进程、户的状态信息,因此大量使用并发执行技术,如多进程、多线程等,这也就涉及到进程、线程的动态创建、调度、多线程等,这也就涉及到进程、线程的动态创建、调度、删除等问题。这些问题处理得好坏直接影响到服务器的性删除等问题。这些问题处理得好坏直接影响到服务器的性能。

    15、能。设计模式n文献文献7-2中描述了中描述了23个设计模式,并将它们分为个设计模式,并将它们分为三种类型:创建型设计模式、结构型设计模式和三种类型:创建型设计模式、结构型设计模式和行为型设计模式。行为型设计模式。 设计模式Factory MethodFactory Method(工厂方法)(工厂方法)Abstract FactoryAbstract Factory(抽象工厂)(抽象工厂)SingletonSingleton(单件)(单件)CompositeComposite(组合)(组合)ProxyProxy(代理)(代理)IteratorIterator(迭代器)(迭代器)Observer

    16、Observer (观察者)(观察者)动机和实例、应用场合、结构、核心思想动机和实例、应用场合、结构、核心思想设计模式-Factory Methodn动机与实例:动机与实例:“龙珠龙珠”游戏游戏魔力管道:魔力管道: 弹球(弹球(pop) 制造球(制造球(Enchant)球球设计模式-Factory Methodn动机与实例:动机与实例:“龙珠龙珠”游戏游戏-设计设计1球有多种,如皮球、钢球球有多种,如皮球、钢球BallBall抽象父类抽象父类BallBall无法被实例化无法被实例化?设计模式-Factory Methodn动机与实例:动机与实例:“龙珠龙珠”游戏游戏-设计设计2new Ball

    17、new Ball动作包装成虚函数动作包装成虚函数MakeBallFactoryMethodMakeBallFactoryMethod在子类(描述各种魔力管道)中重新定义该虚函数在子类(描述各种魔力管道)中重新定义该虚函数设计模式-Factory Methodn适用场合:有一些实体(各种魔力管道),它们适用场合:有一些实体(各种魔力管道),它们的结构和行为是相似的,且都包含一些相似的更的结构和行为是相似的,且都包含一些相似的更小实体(各类球),但一个大实体内部的这些小小实体(各类球),但一个大实体内部的这些小实体都是同一类的(一种魔力管道内只有一种球实体都是同一类的(一种魔力管道内只有一种球)。

    18、此时,如果各类小实体的描述构成一个类层)。此时,如果各类小实体的描述构成一个类层次,那么可使用次,那么可使用Factory Method模式,将各类大模式,将各类大实体也描述为一个类层次。实体也描述为一个类层次。 设计模式-Factory Methodn结构:结构:设计模式-Factory Methodn核心思想归纳:在父类中,将创建对象的操作包核心思想归纳:在父类中,将创建对象的操作包装为一个虚函数,在描述公共行为的过程中调用装为一个虚函数,在描述公共行为的过程中调用该函数;在子类中重定义该虚函数来定制创建的该函数;在子类中重定义该虚函数来定制创建的对象,从而间接定制公共行为。利用虚函数的多

    19、对象,从而间接定制公共行为。利用虚函数的多态机制,态机制,Factory Method模式使得父类可集中描模式使得父类可集中描述公共行为,而将特别行为(不同对象的创建)述公共行为,而将特别行为(不同对象的创建)抽放于子类。抽放于子类。设计模式-Abstract Factoryn动机与实例:魔力管道。动机与实例:魔力管道。 在前面的设计中,三个在前面的设计中,三个MakeBallFactoryMethod工工厂方法散放在三个厂方法散放在三个MagicPipe类中。为了降低复杂类中。为了降低复杂性,可以把所有的创建动作拆分出来单独考虑。性,可以把所有的创建动作拆分出来单独考虑。 即:创建球的动作单

    20、独形成一个工厂类,专门创建即:创建球的动作单独形成一个工厂类,专门创建对象。对象。设计模式-Abstract Factoryn动机与实例:设计动机与实例:设计3设计模式-Abstract Factoryn动机与实例:设计动机与实例:设计4不仅有球、还有盒子等小实体,不仅有球、还有盒子等小实体,抽象工厂类专门创建各种小实体抽象工厂类专门创建各种小实体设计模式-Abstract Factoryn动机与实例:设计动机与实例:设计5混合管道和小实体混合管道和小实体设计模式-Abstract Factoryn适用场合:当需要创建一组多种风格的小实体、适用场合:当需要创建一组多种风格的小实体、且具体创建方

    21、式又要灵活可调整时,可使用且具体创建方式又要灵活可调整时,可使用Abstract Factory模式,将公共的创建行为描述为模式,将公共的创建行为描述为一个抽象类,而将具体的创建方式用该抽象类的一个抽象类,而将具体的创建方式用该抽象类的子类来描述。子类来描述。设计模式-Abstract Factoryn结构:结构:设计模式-Abstract Factoryn核心思想归纳:为了提供灵活性,将需要创建的核心思想归纳:为了提供灵活性,将需要创建的同一风格的一组小实体的一般特征提取出来,用同一风格的一组小实体的一般特征提取出来,用一组抽象产品类来描述,同时将创建行为封装为一组抽象产品类来描述,同时将创

    22、建行为封装为一个抽象工厂类,提供通用的创建接口,而将各一个抽象工厂类,提供通用的创建接口,而将各种具体的产品和具体的创建行为用抽象产品类和种具体的产品和具体的创建行为用抽象产品类和抽象工厂类的子类来描述。从而使得抽象工厂类的子类来描述。从而使得BigEntity和和具体的产品特性和具体的创建行为隔离开来,既具体的产品特性和具体的创建行为隔离开来,既降低了耦合度,也使得灵活调整创建行为成为可降低了耦合度,也使得灵活调整创建行为成为可能。能。 设计模式-Singletonn动机与实例:日志功能,在一个应用程序内部一动机与实例:日志功能,在一个应用程序内部一般只需要一个日志实例即可。般只需要一个日志

    23、实例即可。实现方案实现方案1公有的构造函数公有的构造函数/log.h#include #include class Log public: Log(); void Print(LPSTR format, .); void SetFile(LPSTR filename); virtual Log();private:设计模式-Singleton实现方案1全局变量全局变量设计模式-Singleton 实现方案1需要日志的地方直接使用变量需要日志的地方直接使用变量g_log和相关接口函数和相关接口函数/main.cpp#include log.hvoid main() g_log.SetFile(

    24、myapp.log ); g_log.Print(App starts.); .设计模式-Singleton 实现方案1:两个缺陷一般情况下(如果只有一个日志文件)只需要一个Log实例即可,但上述做法不能保证Log的实例只有一个,当多个实例设置相同的日志文件的时候,还可能引起冲突;这种做法使得g_log无论用到与否都要被创建。设计模式-Singleton 实现方案2:使用Singleton模式私有静态成员变量,私有静态成员变量,代替全局变量,指向代替全局变量,指向log唯一实例唯一实例构造函数变为构造函数变为protected不可能在类外部创建实例不可能在类外部创建实例静态私有函数代替全局变量

    25、,静态私有函数代替全局变量,获取实例指针获取实例指针设计模式-Singleton 实现方案2:使用Singleton模式#include “log.h”Log *log:theOnlyInstance=0;Log *Log:getInstance()If (! theOnlyInstance)theOnlyInstance=new Log();Return theOnlyInstance;初始化为初始化为0静态成员函数静态成员函数getInstance返回返回theOnlyInstance的值的值设计模式-Singleton 实现方案2:使用Singleton模式#include “log.h

    26、”Void main()Log *plog=Log:getInstance();需要日志时,需要日志时,调用静态成员函数调用静态成员函数getInstance值值设计模式-Singleton 适用场合:当需要确保一个类最多只有一个实例时,使用本模式。设计模式-Singleton 结构:设需要保证只有一个实例的类为Singleton,则类Singleton的定义为:设计模式-Singleton 结构:类Singleton的实现为:设计模式-Singleton 核心思想归纳:通过将一个类的构造函数设置为protected或private,可有效阻止从外部直接创建该类的实例;同时设置一个静态成员函数

    27、,以负责创建唯一的实例并向外提供访问接口。设计模式-Composite 动机与实例:幻灯片制作软件。一张幻灯片上可以有各种图元对象:文本框、图形、图像、影片、声音等等。图元具有“递归组合”特性。设计模式-Composite 适用场合:当需要描述的对象具有“递归组合”特征、且希望用户忽略基本对象与组合对象的区别时,适用本模式。 结构:设计模式-Composite 核心思想归纳:为基本对象和组合对象提供一个公共的抽象父类,以表示所有对象,并建立起从该抽象父类到组合对象类的聚集关联,从而间接建立起“递归组合”特性。设计模式-Proxy 动机与实例:网络中间件。在这类程序中,实际工作的对象可能运行在远

    28、程的主机上,与客户端应用分别处于不同的地址空间。为了编程方便,在其中大量地使用了Proxy模式。建立一个Proxy对象:它与Server对象的接口是一样的,而且与Client对象位于同一台机器、同一地址空间中,所有发给它的操作请求最终都转发Server对象。给使Client对象的设计开发变得简单,就像本地编程一样,网络交互的许多细节则集中到Proxy对象的实现中。设计模式-Proxy适用场合:前面的例子中使用Proxy模式是为了屏蔽网络交互细节、透明进行远程访问,因此属于“远程代理”;还有一些场合是为了提高性能、降低开销,而设置一个“虚代理”,如文档文件中的图像代理,它只描述图像的位置、大小等

    29、基本信息,具体图像文件细节仅在需要时再创建一个真正的图像对象来描述;另外,当被访问对象的内部结构很复杂且需要进行智能的分析、决策和协调时,可使用“智能代理”来屏蔽这些智能决策的细节,如一个“订票”代理就是如此:它可根据多家航空公司的订票服务,智能选择一种符合用户要求的订票方案。 设计模式-Proxy 结构设计模式-Proxy核心思想归纳:构造一个具有相同接口的代理对象,然后将操作请求转发给真实对象,其目的是向客户隐藏“转发过程”的细节(如远程网络交互、智能决策、选择性转发等),提供对真实对象的透明访问。设计模式-Iterator 动机与实例:支持遍历的列表设计。 设计方案1内部迭代外部迭代vo

    30、id PrintList(List * pList) for (pList-First(); !pList-IsDone(); pList-Next() pList-CurrentItem()-Print();设计模式-Iterator动机与实例:支持遍历的列表设计。设计方案1的问题:其一,这种设计只能描述一种遍历方式,如向前遍历或向后遍历,但不能同时描述多种遍历方式。或许,大家觉得只需要再向List里面增加一些表示遍历的接口函数和表示位置的成员变量即可,但这样一来众多关系不紧密的功能混放在一个类里,会使得内聚程度变低,容易导致类膨胀,同时也给函数命名等带来不便。其二,这种设计不支持在一个列表

    31、上同时进行多个相同类型的遍历(如都是向后遍历,只是对元素的处理方式不同),而这种情况可能出现在并行程序中。 设计模式-Iterator 设计方案2: 在一个列表上同时进行多个相同类型的遍历。 使用Iterator模式,将负责遍历的部分功能从List中分离出来,单独形成一个类ListIterator设计模式-Iterator 设计方案2:在一个列表上同时进行多个相同类型的遍历Class ListIteratorPrivate:const List *list;ListIterator增加指向原列增加指向原列表的指针。因此,一个表的指针。因此,一个ListIterator实例记录了与实例记录了与列

    32、表的一次遍历相关的列表的一次遍历相关的所有信息,通过定义所有信息,通过定义ListIterator的多个实例变的多个实例变量,就可以在一个列表量,就可以在一个列表上同时进行多个相同类上同时进行多个相同类型的遍历。型的遍历。设计模式-Iterator 设计方案3: 以多种方式遍历一个列表,再定义一个迭代器类型List * aList;.ListIterator forward(aList);ReverseListIterator backward(aList);for (forward.First(); ! forward.IsDone(); forward.Next() forward.Cur

    33、rentItem()-Print();for (backward.First(); ! backward.IsDone(); backward.Next() backward.CurrentItem()-Print();设计模式-Iterator 适用场合:当需要以多种方式灵活地遍历一个聚合对象中的各个元素时,适用本模式。 结构:设计模式-Iterator 核心思想归纳:通过将与遍历有关的部分从聚合对象的描述中分离出来、单独成类,能够将遍历的状态信息用一个独立对象记录,从而可有效处理多种遍历和并发遍历。另外,本模式可与Factory Method模式配合使用,支持从聚合对象直接创建相应的聚合器

    34、。设计模式-Observer 动机与实例:Word软件的“窗口拆分”功能。设计模式-Observer 动机与实例:Word软件的“窗口拆分”功能。设计模式-Observer 动机与实例:Word软件的“窗口拆分”功能。设计模式-Observer 动机与实例:Word软件的“窗口拆分”功能。class Document;class Window public: void Update(); Window (Document * d) doc = d; doc-Attach(this); Window () doc-Detach(this); private: void ModifyData();

    35、设计模式-Observer适用场合:如果对象之间存在一对多的数据依赖关系、且当被依赖对象的数据改变时所有依赖于它的对象都应得到通知并自动更新,那么可使用本模式。被依赖的对象称为发布者,负责发布数据并通知所有的订阅者(即依赖于该发布者的对象),以便订阅者与发布者的状态保持一致。前面的例子中,Document对象为发布者,而Window对象为订阅者。因此,本模式也称为发布-订阅(Publish-Subscribe)模式。订阅者也可称为观察者(Observer),它似乎在时刻观察发布者的状态,并及时更新自己。设计模式-Observer 结构:设计模式-总结、分类总体来说设计模式分为三大类:创建型模式

    36、,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。设计模式-总结、原则1、开闭原则(、开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这

    37、样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。2、里氏代换原则(、里氏代换原则(Liskov Substitution Principle)里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,

    38、所以里氏代换原则是对实现抽象化的具体步骤的规范。 From Baidu 百科3、依赖倒转原则(、依赖倒转原则(Dependence Inversion Principle)这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。设计模式-总结、原则4、接口隔离原则(、接口隔离原则(Interface Segregation Principle)这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。5、迪米特法则(最少知道原则)(、迪米特法则(最少知道原则)(Demeter Principle)为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。6、合成复用原则(、合成复用原则(Composite Reuse Principle)原则是尽量使用合成/聚合的方式,而不是使用继承。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:软件设计与体系结构第七章软件体系结构分隔与设计模课件.ppt
    链接地址:https://www.163wenku.com/p-3008585.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库