中南大学 软件体系结构重点
中南大学软件体系结构重要资料

第一章软件体系结构概述(5分)一、软件体系结构的定义●国内普遍接受的定义:软件体系结构包括构件、连接件和约束,它是可预制和可重构的软件框架结构。
●软件体系结构= 构件+ 连接件+ 约束二、软件体系结构的优势●容易理解●重用●控制成本●可分析性第二章软件体系结构风格(10分)一、软件体系结构风格定义●软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。
An architectural style defines a family of systems in terms of a pattern ofstructural organization.●体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。
词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
An architectural style defines a vocabulary of components and connectortypes, and a set of constraints on how they can be combined.二、常见的体系结构风格●管道和过滤器➢每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
➢过滤器风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。
●数据抽象和面向对象组织➢数据的表示方法和它们的相应操作被封装在一个抽象数据类型或对象中。
➢这种风格的构件是对象或者说是抽象数据类型的实例。
➢对象通过函数和过程的调用来进行交互。
●基于事件的隐式调用➢构件不直接调用一个过程,而是触发或广播一个或多个事件。
➢事件的触发者并不知道哪些构件会被这些事件影响。
●分层系统➢组织成一个层次结构。
➢每一层都为上一层提供了相应的服务,并且接受下一层提供的服务。
●仓库系统➢构件:中心数据结构(仓库)和一些独立构件的集合。
中南大学软件学院架构复习大全

●使用Hibernate框架进行ORM,可大幅度减少开发时手工使用SQL和JDBC的出错。
优点:简单。
缺点:多了查询,慢(但实际对于一个JAVA EE应用而言,hibernate通常的处理流程是:从数据看里加载记录->将信息发送到表现层供用户修改或删除->将所做修改重新保存到数据库。
在这种处理流程下,应用本身就需要两条SQL语句)。
●iBats---半自动化ORM框架提供了基于JDBC之上的一层简单抽象,是一种基于SQL语句映射的低级别ORM方案,使用原生态SQL作为查询语言。
●OGNL是Object Graph Navigation Language,对象图导航语言。
ONGL是一种强大的表达式语言,它通过简单一致的表达式语法来读取和设置Java对象的属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。
WEB容器是指一种安装在服务端计算机中的特定软件。
此类软件遵循HTTP 协议,主要功能是负责侦听指定端口,接收客户端的请求并解析,然后将指定的响应页面发送到客户端。
EL表达式EL是一种简单而强大的语言,提供了在JSP脚本元素范围外使用运行时表达式的功能。
Web Services应用程序组件,使用开放协议进行通信,独立的并可自我描述,可通过使用UDDI来发现,可以被其他应用程序使用,XML是其基础。
●Mybatis一个持久数据映射框架,提供了基于JDBC之上的一层简单抽象,是一种基于SQL语句映射的低级别ORM方案,使用原生态SQL作为查询语言,用来完成数据持久化MyBaits基本原理:在XML 文件中定义SQL语句,预留参数占位符;在运行时,占位符被指定的参数值取代,参数可能来自参数映射表、JavaBean属性、或者简单的参数对象。
在执行SQL查询时,结果字段被映射到对象,映射的方式与参数映射一样。
●ORM框架ORM, Object-Relational Mapping, 对象-关系数据库映射框架。
软件体系结构(老师划重点版)

软件体系结构(老师划重点版)软件体系结构复习资料Chapter 11.软件重用技术可以减少软件开发过程中大量的重复性工作,这样就能提高软件生产率、降低开发成本、缩短开发周期。
2.软件构件是语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上他是语义描述、通信接口和实现代码的复合体。
简单的说,构件是具有一定的功能,能够独立工作或能同其他构件装配起来协调工作的程序体。
3.可重用技术对构件库组织方法的要求是:不仅要支持精确匹配、还要支持相似构件的查找。
4.超文本方法与基于数据库系统的构件库组织方法不同,它基于全文检索技术。
5.件体系结构充当一个理解系统构件和他们之间关系的框架,特别是那些始终跨越时间和实现的属性。
Chapter 26.软件体系结构的模型分为五种:结构模型、框架模型、动态模型、过程模型和功能模型,最常用的是结构模型和动态模型。
7.“4+1视图模型“从5个不同的视角:逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件体系结构。
8.逻辑视图主要支持系统的功能需求,即系统提供给最终用户的服务。
开发视图也可以成为模块视图,主要侧重于软件模块的组织与管理。
进程视图侧重于系统的运行特性,主要关注一些非功能性的需求,例如系统的性能和可用性。
物理视图主要考虑如何把软件映射的硬件上,它通常要考虑系统性能、规模和可靠性等。
场景可以看做是那些重要系统活动的抽象,他是四个视图有效的联系起来,从某种意义上说场景是最重要的需求抽象。
从以上分析可知,逻辑视图和开发视图描述软件的静态结构,进程视图和物理视图描述系统的动态结构。
9.软件体系结构的核心模型有五种元素构成:构件、连接件、配置、端口和角色,其中构件、连接件和配置是最近本的元素。
构件时具有某种功能的可重用的软件模板单元,表示系统中最重要的计算元素和计算存储。
构件有两种:符合构件和原子构件,符合构件有其他符合构件和原子构件通过连接而成。
(2021年整理)设计模式-软件体系结构-实验4-中南大学-软件学院

设计模式-软件体系结构-实验4-中南大学-软件学院编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(设计模式-软件体系结构-实验4-中南大学-软件学院)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为设计模式-软件体系结构-实验4-中南大学-软件学院的全部内容。
《软件体系结构》实验报告项目名称结构型设计模式实验专业班级学号姓名实验成绩:批阅教师:年月日实验4 结构型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型设计模式,包括适配器模式、组合模式和外观模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。
二、实验内容1。
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法。
试使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。
绘制类图并编程实现。
(要求实现快速排序和二分查找,使用对象适配器实现)2. Windows Media Player和RealPlayer是两种常用的媒体播放器,它们的API结构和调用方法存在区别。
软件体系结构知识点完整

1、构件就是核心与基础,重用就是必需得手段。
2、软件重用就是指在两次或多次不同得软件软件开发过程中重复使用相同或相近软件元素得过程。
3、软件元素包括程序代码、设计文档、设计过程、需求分析文档甚至领域知识。
4、把可重用得元素称作软构件,简称为软构件。
5、可重用软件元素越大,就说重用得粒度越大。
6、构件就是指语义完整、语法正确与有可重用价值得单位软件,就是软件重用过程中可以明确辨识得系统;结构上,它就是语义描述、通信接口与代码实现得复合体。
7、面向对象技术达到类级重用,以类为封装得单位。
8、构件模型就是对构件本质特征得抽象描述。
三个主要流派,分别就是OMG(对象管理组织)得CORBA(通用对象请求代理结构)、Sun得EJB与Microsoft得DOM(分布式构件对象模型)。
9、获取构件得四个途径:(1)从现有构件中获得符合要求得构件,直接使用或作适应性修改,得到可重用构件。
(2)通过遗留工程,将具有潜在重用价值得构件提取出来,得到可重用构件。
(3)从市场上购买现成得商业构件,即COTS构件。
(4)开发符合要求得构件。
10、构件分类方法三大类:关键字分类、刻面分类法、超文本组织方法11、构件检索方法:基于关键字得检索、刻面检索法、超文本检索法与其她检索方法。
12、减少构件修改得工作量,要求工作人员尽量使构件得功能、行为与接口设计更为抽象画、通用化与参数化。
13、构件组装技术:基于功能得组装技术、基于数据得组装技术与面向对象得组装技术。
14、软件体系结构得定义:软件体系结构为软件系统提供了一个结构、行为与属性得高级抽象,由构成系统得元素得描述、这些元素得相互作用、指导元素集成得模式以及这些模式得约束组成。
软件体系结构不仅指定了系统得组织结构与拓扑结构,并且显示了系统需求与构成系统得元素之间得对应关系,提供了一些设计决策得基本原理。
软件体系结构得意义:(1)体系结构就是风险承担者进行交流得手段;(2)体系结构就是早期设计决策得体现--①软件体系结构明确了对系统实现得约束条件②软件体系结构决定了开发与维护组织得组织结构③软件体系结构制约着系统得质量属性④通过研究软件体系结构可能预测软件得质量⑤软件体系结构使推理与控制更改更简单⑥软件体系结构有助于循序渐进得原型设计⑦软件体系结构可以作为培训得基础;(3)软件体系结构就是可传递与可重用得模型。
中南大学软件体系结构重点

第一章软件体系结构概述(5分)一、软件体系结构的定义●国内普遍接受的定义:软件体系结构包括构件、连接件和约束,它是可预制和可重构的软件框架结构。
●软件体系结构= 构件+ 连接件+ 约束二、软件体系结构的优势●容易理解●重用●控制成本●可分析性第二章软件体系结构风格(10分)一、软件体系结构风格定义●软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。
An architectural style defines a family of systems in terms of a pattern of structuralorganization.●体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。
词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
An architectural style defines a vocabulary of components and connector types, and aset of constraints on how they can be combined.二、常见的体系结构风格●管道和过滤器每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。
过滤器风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。
●数据抽象和面向对象组织数据的表示方法和它们的相应操作被封装在一个抽象数据类型或对象中。
这种风格的构件是对象或者说是抽象数据类型的实例。
对象通过函数和过程的调用来进行交互。
●基于事件的隐式调用构件不直接调用一个过程,而是触发或广播一个或多个事件。
事件的触发者并不知道哪些构件会被这些事件影响。
●分层系统组织成一个层次结构。
每一层都为上一层提供了相应的服务,并且接受下一层提供的服务。
●仓库系统构件:中心数据结构(仓库)和一些独立构件的集合。
软件设计与体系结构知识点

1.软件设计的特征(1)软件设计的开端是出现某些新的问题需要软件来解决,这些需要促使设计工作的开始,并成为整个设计工作最初的基础(2)软件设计的结果是给出一个方案,它能够用来实现所需的、可以解决问题的软件,方案的描述可能是文字、图表,甚至数学符号、公式等组成的文档或模型(3)软件设计包含一系列的转换过程,即把一种描述或模型转换为另一种描述或模型,转换后的形态可能更加具体,或更接近于实现(4)产生新的想法或思路对软件设计非常重要,因为设计也是一个创造性的过程,不同的问题或需求总会存在各自的特点,即使同样的问题在不同时期和环境下也会存在区别,因此设计不会是一成不变的(5)软件设计的过程是不断解决问题和实施决策的过程,因为整个设计是解决一个大的问题,在设计过程中将会分解成众多小问题,涉及真需要一次解决这些小的问题,并在出现多种方案或策略时进行决策,选择其中最合适的(6)软件设计也是一个满足各种约束的过程,因为软件可能在性能、运行环境、开发时间、成本、人员技术水平等各个方面存在约束,设计必须在满足这些约束的情况下给出最佳的设计方案(7)大多数的软件实际是一个不断演化的过程,因为需求在一开始很可能是不完整或不精确的,在设计过程中还会不断发生变化并逐步稳定下来,因此设计需要根据需求的变化而不断演化。
2.软件设计的要素( 1 ) 目标描述 ( 2 ) 设计约束 ( 3 ) 产品描述 ( 4 ) 设计原理 ( 5 ) 开发规划 ( 6 ) 使用描述3.软件设计体系的定义( 1 )软件设计体系结构是软件系统的结构,包含软件元素、软件元素外部可见的属性以及这些软件元素之间的关系( 2 )软件体系结构是软件系统的基本组织,包含构建、构件之间、构件与环境之间的关系,以及相关的设计与演化原则4.软件设计的主要活动( 1 ) 软件设计计划 ( 2 ) 体系结构设计 ( 3 ) 界面设计 ( 4 ) 模块/子系统设计 ( 5 ) 过程/算法设计( 6)数据模型设计5.体系结构“4+1 ”多视图建模( 1 )逻辑视图:该视图关注功能需求,即系统应该为最终用户提供什么服务,它与应用领域精密相关( 2 )进程视图:该视图捕获设计中关于并发和同步的内容,重视一些非功能需求,例如性能、可扩展性等,定义了运行实体和它们的属性。
软件体系结构知识点

构件:构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上,它是语义描述、通讯接口和实现代码的复合体。
构件管理:1构件描述2构件分类与构件库组织:关键字分类法刻面分类法(青鸟)超文本组织方法(基本单位是结点)3人员及权限管理构件重用步骤:检索与提取构件(检索方法同上3种加其他)理解与评价构件修改构件(实参)构件组装(功能数据面向对象)软件体系结构:软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。
软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
软件体系结构的意义:体系结构是风险承担者进行交流的手段体系结构是早期设计决策的体现软件体系结构是可传递和可重用的模型软件体系结构建模的种类:结构模型框架模型动态模型过程模型功能模型4+1”视图模型从5个不同的视角包括逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件体系结构。
逻辑视图主要支持系统的功能需求,即系统提供给最终用户的服务。
开发视图也称模块视图,主要侧重于软件模块的组织和管理。
进程视图侧重于系统的运行特性,主要关注一些非功能性的需求。
物理视图主要考虑如何把软件映射到硬件上,它通常要考虑到系统性能、规模、可靠性等。
场景可以看作是那些重要系统活动的抽象,它使四个视图有机联系起来,从某种意义上说场景是最重要的需求抽象。
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。
体系结构风格反映了领域中众多系统所共有的结构和语义特性经典的体系结构风格数据流风格:批处理序列;管道/过滤器。
调用/返回风格:主程序/子程序;面向对象风格;层次结构。
独立构件风格:进程通讯;事件系统。
虚拟机风格:解释器;基于规则的系统。
仓库风格:数据库系统;超文本系统;黑板系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
需求工程所有与需求直接相关的活动通称为需求工程。
包括需求开发和需求管理。
需求开发包括需求的调查,分析和定义,需求管理包括需求的确认、跟踪以及变更控制C/S体系结构定义了工作站如何与服务器相连,以实现数据和应用分布到多个处理机上。
C/S体系结构有三个主要组成部分:数据库服务器、客户应用程序和网络c/s优点:1、具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受2、对于硬件和软件的变化有极大的适应性和灵活性,而且易于对系统进行扩充和缩小。
3、将大的应用处理任务分布到许多通过网络连接的低成本计算机上,节约大量费用缺点缺点:开发成本较高客户端程序设计复杂信息内容和形式单一用户界面风格不一,使用繁杂,不利于推广使用软件移植困难软件维护和升级困难新技术不能轻易应用b/s优点:1、实现了零客户端,易于服务升级2、提供了异种机、异种网、异种应用服务器的联机、联网、统一服务的最现实的开放性基础。
b/s缺点:B/S体系结构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
系统扩展能力差,安全性难以控制。
在数据查询等响应速度上,远远低于C/S体系结构。
数据的动态交互性不强,不利于在线事务处理(OLTP)应用。
适配器模式(Adapter Pattern) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作优点:1、将目标类和适配者类解耦2、增加了类的透明性和复用性3、灵活性和扩展性都非常好4、类适配器:可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
5、对象适配器:同一个适配器可以把适配者类和它的子类都适配到目标接口。
缺点:类适配器:不支持多继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性对象适配器:要想置换适配者类的方法就不容易适用:系统需要使用现有的类,而这些类的接口不符合系统的需要。
想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类一起工作桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化优点:• 分离抽象接口及其实现部分。
• 桥接模式有时类似于多继承方案,但是多继承方案违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差,而且多继承结构中类的个数非常庞大,桥接模式是比多继承方案更好的解决方法。
• 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
• 实现细节对客户透明,可以对用户隐藏实现细节。
缺点:1、增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
2、要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性适用:一个类存在两个独立变化的维度,且这两个维度都需要进行扩展不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责(Responsibility)优点:1、装饰模式可以提供比继承更多的灵活性。
2、可以通过一种动态的方式来扩展一个对象的功能3、通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合4、具体构件类与具体装饰类可以独立变化缺点:1、使用装饰模式进行系统设计时将产生很多小对象,增加系统的复杂度2、装饰模式比继承更加易于出错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。
适用:1、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责2、需要动态地给一个对象增加功能,这些功能也可以动态地被撤销。
3、当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时工厂方法模式(factory method)在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
优点:• 用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。
• 工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。
• 在系统中加入新产品时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具体工厂和具体产品就可以了。
符合开闭原则。
缺点:• 在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销。
• 由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,适用场景:一个类不知道它所需要的对象的类,一个类通过其子类来指定创建哪个对象,将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类优点:1、隔离了具体类的生成,使得客户并不需要知道什么被创建。
2、一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
4、可以实现高内聚低耦合的设计目的缺点:1、添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品2、开闭原则的倾斜性(增加新的工厂和产品族容易,增加新的产品等级结构麻烦)适用:1、一个系统不依赖于产品类实例如何被创建、组合和表达的细节2、系统中有多于一个的产品族,而每次只使用其中某一产品族。
属于同一个产品族的产品将在一起使用3、系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例优点:1、提供了对唯一实例的受控访问2、可以节约系统资源3、允许可变数目的实例缺点:1、单例模式中没有抽象层,因此单例类的扩展有很大的困难2、单例类的职责过重,在一定程度上违背了“单一职责原则”3、滥用单例将带来一些负面问题适用:1、系统只需要一个实例对象(唯一序列号生成器或消耗资源过大)2、客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。
结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构组合模式(Composite Pattern):组合多个对象形成树形结构以表示“整体-部分”的结构层次。
优点:1、清楚地定义分层次的复杂对象2、客户端调用简单,客户端可以一致的使用组合结构或其中单个对象3、更容易在组合体内加入对象构件,客户端不必因为加入了新的对象构件而更改原有代码。
4、定义了包含叶子对象和容器对象的类层次结构,叶子对象可以被组合成更复杂的容器对象,而这个容器对象又可以被组合,这样不断递归下去,可以形成复杂的树形结构。
缺点:1、使设计变得更加抽象,对象的业务规则如果很复杂,则实现组合模式具有很大挑战性2、增加新构件时可能会产生一些问题,很难对容器中的构件类型进行限制。
适用:1、让客户能够忽略不同对象层次的变化,客户端可以针对抽象构件编程,无须关心对象层次结构的细节。
2、对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理它们。
3、需要表示一个对象整体或部分层次且希望通过一种方式忽略整体与部分的差异,可以一致地对待它们外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用优点:1、对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。
2、实现了子系统与客户之间的松耦合关系,使得子系统的组件变化不会影响到调用它的客户类3、降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程(子系统可以单独修改对外无影响)4、只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。
缺点:1、不能很好地限制客户使用子系统类2、在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”适用:1、当要为一个复杂子系统提供一个简单接口时可以使用外观模式2、客户程序与多个子系统之间存在很大的依赖性3、层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。
代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
优点:1、能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
2、远程代理使得客户端可以访问在远程机器上的对象3、虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度4、保护代理可以控制对真实对象的使用权限缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂适用:观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
优点:1、实现表示层和数据逻辑层的分离2、观察者模式在观察目标和观察者之间建立一个抽象的耦合。
3、观察者模式支持广播通信4、观察者模式符合“开闭原则”的要求缺点:1、如果一个观察目标对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间2、观察者和观察目标之间有循环依赖的话,可能导致系统崩溃3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
适用:1、一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变2、一个对象必须通知其他对象,而并不知道这些对象是谁3、需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。