《软件设计模式与体系结构复习资料.pdf》由会员分享,可在线阅读,更多相关《软件设计模式与体系结构复习资料.pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、设计准则 I:对的性和健壮性1.对的性:每个项目都要满足指定的需求,然后一起满足所有应用程序的需求,设计的对的性一般是指充足性,实现对的性的正式方法是依靠数学逻辑,非正式方法是判断设计是否满足所需的功能,当进入具体设计阶段时,经常采用正式方法来判断对的性。2.模块可是类或者类的包,包的接口和类的接口不同,包不能被实例化,通过包来使用接口的一种方法是运用包中指定对象来提供相应的接口。3.为了模块化特定的应用程序,在高层需要创建包,在底层需要创建类4.设计中用到两种类:领域类和非领域类,一般是从领域类开始类的选择,然后扩展到非领域类,非领域类通常用于概括领域类。5.健壮性:防止错误输入,防止开发错
2、误;提高健壮性的办法:检查输入、初始化、参数传递技术、检查参数是否违反约束的方法、在类中捕获参数、包装参数、强化意图。设计准则 II 灵活性、可重用性、高效性1.灵活性:在设计时通常要考虑到将来的变化;增长新功能要依据其上下文和应用范围2.可重用性:一个方法相对于上下文环境越独立,其可重用性就越高;完全指定、避免不必要的封装类耦合、让名字更具表达性、解释算法。3.高效性:应用程序必须在指定期间内完毕特定的功能,同样,对内存容量也有一定的规定设计模式引言:1.设计目的是:灵活性、健壮性、可重用性2.设计原则:面向接口编程的原则(面向接口编程而不是面向实现编程)、可变性封装、开闭原则(对扩展开放,
3、对修改关闭)、里氏替换原则(合用于父类,但不一定合用子类)、组合/聚合原则(尽量使用组合聚合/聚合,尽量不使用继承);接口隔离原则(避免接口污染)、依赖倒转原则(高层低层依赖于抽象、细节依赖于抽象)、迪米特原则(不和陌生人说话)、单一原则3.模式的四个基本要素:问题(描述了应当在何时使用模式)、解决方案(描述了设计的组成成分)、效果(描述了模式应用的效果及使用模式应当权衡的问题)、模式名称4.设计模式分类:按照目的可以分为:创建型、结构型、行为型 按照范围可以分为:类模式、对象模式5.模式和框架的区别:1)设计模式比框架更抽象2)设计模式是比框架更小的体系结构元素3)框架比设计模式更加特例化创
4、建型模式:1.创建型模式涉及抽象工厂模式、生成器模式、工厂模式、原型模式、单件模式2.创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建、组合和表达它的那些对象3.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。4.随着系统演化地越来越依赖于对象复合而不是类继承,创建型模式变得更为重要5.创建型模式在什么被创建、谁创建它、它是如何被创建的以及何时创建这些方面给予很大的灵活性6.抽象工厂模式:意图:提供一个创建一系列相关或互相依赖对象的接口而不需要指定他们具体的类别名:KIT合用性:1)一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节2)
5、这个系统的产品有多余一个的产品族,而系统只消费其中某一个族的产品3)同属于一个产品族的产品是在一起使用的4)系统提供一个产品类的库,所有产品以同样的接口实现,从而使客户端不依赖于实现参与者:抽象工厂角色(核心)、具体工厂(在客户端的调用下创建实例)、抽象产品(所拥有的共同接口)、具体产品效果:1)分离了具体的类2)使得易于互换产品系列3)有助于产品的一致性4)难以支持新种类的产品实现:1)将工厂作为一个单件 2)创建产品 3)定义可扩展的工厂相关:AbstractFactory 类通常用工厂方法实现,一个具体工厂通常是一个单件工厂方法模式:意图:定义一个用于创建对象的接口,让子类决定实例化哪个
6、类。Factory Method使一个类的实例化延迟到其子类别名:虚构造器合用性:1)当一个类不知道它所必须创建的对象的类的时候2)当一个类希望由他的子类来指定他所创建的对象的时候效果:1)多态性:客户代码可以做到与特定应用无关,合用于任何实体类2)子类提供挂钩。基类为工厂方法提供缺省实现,子类可以重写新的实现,也可以继承父类的实现。-加一层间接性,增长了灵活性3)封装性好,扩展性好,屏蔽产品类4)需要 Creator 和相应的子类作为 factory method 的载体,假如应用模型的确需要 creator 和子类存在,则很好;否则的话,需要增长一个类层次单件模式:意图:保证一个类有且只有
7、一个实例,并提供一个访问它的全局访问点合用性:1)当类只能有一个实例并且客户可以从一个众所周知的访问点访问它2)当这个唯一实例应当是通过子类化可扩展的,并且客户应当无需更改代码就能使用一个扩展类的实例优点:1)对唯一实例的受控访问2)缩小名空间3)允许对操作和表达的精化4)比类操作更灵活使用单件模式的要点:单件模式中的实例构造器可以设立为 protected 以允许子类派生;单件模式只考虑到了对象创建的管理,没有考虑对象销毁的管理。实现:保证一个唯一的实例;创建单件类的子类/本质:内存中只能有一个对象/案例:定期器,计数器/使用场景:一个项目只要一个共享访问点和共享数据;创建对象消耗资源比较多
8、,如 IO 操作和数据库读取/注意:线程安全public sealed class Singletonprivate static Singleton _singleton=null;private static readonly object _synLock=new object();private Singleton()public static Singleton GetInstance()lock(_synLock)if(_singleton=null)_singleton=new Singleton();return _singleton;结构型模式:1.结构型模式涉及到如何组合类
9、和对象以获得更大的结构。2.结构型类模式采用继承机制来组合接口或者实现。3.结构型模式涉及:适配器模式(类对象)、组合模式(对象)、装饰模式(对象)4.适配器模式:意图:将一个类的接口转化为客户希望的此外一个接口,Adapter 模式使得原本由于接口不兼容而不可以在一起工作的类可以一起工作别名:包装器合用性:1)想使用一个已经存在的类,但接口不符合需要2)想创建一个可复用的类,该类可以和其他不相关的类和不可预见的类协同工作3)想使用一些已经存在的类,但不也许对每一个都子类化以匹配他们的接口,对象适配器可以可以适配他们的父类接口结构:类适配器(使用多重继承)效果:类适配器:1)用一个具体的类适配
10、 Adaptee 和 Target,当想要匹配一个类及他的子类的时候,类 Adapter 将不再合用2)Adapter 可以重新定义 Adaptee 的部分方法3)仅仅引入了一个对象,不需要额外的指针对象适配器:1)允许 Adapter 和一个或者多个 Adaptee 进行适配,Adapter 可以一次性给多个 Adaptee 添加功能2)使得重新定义 Adaptee 的部分希望变得困难注意事项:1)Adapter 的匹配限度2)可插入的 Adapter3)使用双向适配器通过透明操作实现:可插入的适配器的实现方法:使用抽象操作、使用代理对象、参数化的适配器对象适配器(使用对象组合)组合模式:意
11、图:将对象组合成数结构以表达“整体部分”结构,组合模式使得用户对单个对象和组合对象的使用品有一致性合用性:1)想表达对象的“整体部分”的结构2)希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的对象效果:1)通过递归组合,在客户端代码中,任何用到基本对象的地方都可以使用组合对象2)简化客户代码,客户可以一致地使用组合结构和单个对象3)使得更容易添加新类型的组件4)设计一般化,由于容易添加新组件,也将容易带来新问题装饰模式:意图:动态地给一些对象添加一些额外的职责。别名:包装器模式合用性:1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责2)解决那些可以撤消的职责
12、3)当不能采用生成子类的方法进行扩充时。效果:1)比静态继承更灵活2)避免在层次结构高层的类有太多的特性3)Decorator 余它的 Component 不同样4)有许多小对象使用注意事项:1)接口的一致性Component 类的简朴性行为模式:迭代器模式:2)省 略 抽 象 的 Decorator 类3)保 持意图:提供一种方法顺序访问一个集合对象中的各个元素,而不暴露该对象的内部表达别名:游标适应性:1)访问一个聚合对象的内容而无需暴露它的内部表达2)支持对聚合对象的多重遍历3)支持多重迭代效果:1)它支持以不同的方式遍历一个聚合2)简化了聚合的接口3)在同一个聚合上可以有多个遍历观测者
13、模式:意图:定义对象间的一对多的关系,当一个对象的状态发生变化时,所有依赖于他的对象都得到告知并被自动更新别名:依赖,发布订阅合用性:1)当一个抽象模式有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变及复用2)当对一个对象的改变需要同时改变其他对象,而不知道有多少对象有待改变3)当一个对象必须告知其他对象,但又不能假定其他对象是谁效果:1)目的和观测者间的抽象耦合2)支持广播通信3)意外的更新状态模式:意图:允许一个对象在其内部状态发生改变时改变了它的询问,对象看起来似乎改变了它的类别名:状态对象合用性:1)一个对象的行为取决于他的状态,并且它必须
14、在运营时刻根据状态改变它的行为2)一个操作中具有庞大的多分支语句,并且这些分支依赖于该对象的状态效果:1)将有特定效果的行为局部化,并将不同状态的行为分割开来2)使得状态转换显示化3)State对象可被共享体系结构:定义:软件体系结构涉及构成系统的设计元素的描述,设计元素的交互,设计元素组合的模式,以及这些模式中的约束。意义:1)体系结构是风险承担者进行交流的手段2)体系结构有助于系统级关注点的理解3)体系结构是初期设计决策的体现4)软件体系结构是可传递和可重用的模型作用:软件系统的体系结构定义系统由计算构件和构件之间的互相作用组成;体系结构还指出了系统需求和已构建系统的元素之间的相应关系,能
15、为设计方案的选择提供基本原则。研究内容:1)通过提供一种新的体系结构描述语言(Architectural DescriptionLanguage)解决体系结构描述问题2)体系结构领域知识的总结性研究。3)针对特定领域的框架的研究。4)软件体系结构形式化支持的研究。框架、体系结构、设计模式三者的比较:1)设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,比框架更抽象;2)框架可用代码表达,也能直接执行或复用,而对模式而言只有实例才干用代码表达3)设计模式是比框架更小的元素,一个框架中往往具有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可合用于各种不同的应用。4)
16、体系结构风格描述了软件系统的整体组织结构,它独立于实际问题。而设计模式和应用框架更加面向具体问题。常见的体系结构的优缺陷:两层 C/S 结构:优点:1)强大的数据操作和事务解决能力,模型思想简朴,易于人们理解和接受。2)硬件和软件的变化显示出极大的适应性和灵活性,并且易于对系统进行扩充和缩小3)大的应用解决任务分布到许多通过网络连接的低成本计算机上,以节约大量费用。缺陷:开发成本较高、客户端程序设计复杂、信息内容和形式单一、用户界面风格不一、软件移植困难、软件维护和升级困难、新技术不能容易应用三层 C/S 结构:优点:1)允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,能提高系统和软
17、件的可维护性和可扩展性2)允许更灵活有效地选用相应的平台和硬件系统。并且这些平台和各个组成部分可以具有良好的可升级性和开放性。3)应用的各层可以并行开发4)为严格的安全管理奠定了坚实的基础缺陷:1)三层 C/S 结构各层间的通信效率若不高,即使分派给各层的硬件能力很强,其作为整体来说也达不到所规定的性能2)设计时必须慎重考虑三层间的通信方法、通信频度及数据量。这和提高各层的独立性同样是三层 C/S 结构的关键问题。B/S 结构:优点:1)基于B/S 体系结构的软件,系统安装、修改和维护全在服务器端解决,达到了“零客户端”的功能,很容易在运营时自动升级。2)B/S 体系结构还提供了异种机、异种网
18、、异种应用服务的联机、联网、统一服务的最现实的开放性基础缺陷:1)B/S 体系结构缺少对动态页面的支持能力,没有集成有效的数据库解决功能2)B/S 体系结构的系统扩展能力差,安全性难以控制。3)采用 B/S 体系结构的应用系统,在数据查询等响应速度上,要远远地低于C/S 体系结构4)数据的动态交互性不强,不利于在线事务解决(OLTP)应用C/S 与 B/S 混合之“内外有别”模型:优点:外部用户不直接访问数据库服务器,能保证公司数据库的相对安全;公司内部用户的交互性较强,数据查询和修改的响应速度较快缺陷:公司外部用户修改和维护数据是速度较慢,较烦琐,数据的动态交互性不强C/S 与 B/S 混合
19、之“查改有别”模型:优点:优点体现了 B/S 体系结构和 C/S 体系结构的共同优点,即 B/S 对客户端规定不高,只需要查询的客户端只要安装浏览器即可,提供了开放性,实现修改的终端和服务器之间采用 C/S 结构。缺陷:外部用户能直接通过 Internet 连接到数据库服务器,公司数据容易暴露给外部用户,给数据安全导致了一定的威胁体系结构案例:1.名称:上下文关键字解决方案:1)基于功能分解,可以共享访问数据表达;2)基于隐藏设计决策的分解2.名称:仪器软件解决方案:1)改善后的管道过滤器模型2)专用化模型3.名称:移动机器人解决方案:1)控制环路2)分层体系结构3)隐式调用4)黑板体系结构体
20、系结构评估方法:1)SAAM(软件架构分析方法)体系结构的描述、场景的形成、场景的分类和优先级的拟定、对间接场景的单个评估、场景互相作用的评估、形成总体评估2)ATAM(体系结构权衡分析方法)环节:1)描述:描述 ATAM方法描述商业动机、描述体系结构2)调查与分析:拟定体系结构方法、生成质量属性效用树、分析体系结构方法3)测试:集体讨论并拟定场景优化级分析架构方法4)形成报告:描述评估结果1.评估所关注的属性:性能、可靠性、可用性、安全性、可修改性、功能性、可变性、可继承性、互操作性2.在体系结构中,一般采用刺激、环境、响应来描述场景3.重要的评估方式:调查问卷、基于场景、基于度量4.ATA
21、M的场景:用例场景、成长场景、考察场景。5.SAAM 的场景:直接场景、间接场景。流行的软件体系结构:1.分布式构件技术:CORBA 规范、Sun 的 Java 平台、Microsoft 的.NET 平台2.分布式构件体系结构:J2EE、.NET3.J2EE:使用多层分布式应用模型,最基本的 Java 构件是在 J2ME 中的 JavaBean,JavaBean 涉及实例变量(Instance Variable)和get()、set()方法来访问实例变量的数据。4.J2EE 构件:客户端构件、Web 构件、业务逻辑构件5.EJB 构件:远程接口、本地接口、BEAN 类,EJB 容器为 EJB 构件提供事务管理、持久性、安全性和并发控制等系统服务。6.面向服务的体系结构的特性:松散耦合、位置透明、协议独立7.SOA 中的角色:服务消费者、服务提供者、服务注册中心8.Web 服务核心技术:XML、简朴对象访问协议(SOAP)、Web 服务描述语言(WSDL)、统一描述、发现和集成协议(UDDI)9.COM:为代码的重用提供了一种模块化、面向对象的方式、定义了定位和辨认其他组件功能的标准方式、是微软平台上所有构件的基石。
限制150内