[工学]中间件技术08

上传人:豆浆 文档编号:49740096 上传时间:2018-08-02 格式:PPT 页数:66 大小:1.50MB
返回 下载 相关 举报
[工学]中间件技术08_第1页
第1页 / 共66页
[工学]中间件技术08_第2页
第2页 / 共66页
[工学]中间件技术08_第3页
第3页 / 共66页
[工学]中间件技术08_第4页
第4页 / 共66页
[工学]中间件技术08_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《[工学]中间件技术08》由会员分享,可在线阅读,更多相关《[工学]中间件技术08(66页珍藏版)》请在金锄头文库上搜索。

1、软件复用中的设计模式前言l不是解决任何问题都要从头做起,复用以前 使用过的解决方案l真正复用面向对象很困难l小说家很少从头设计剧情什么是设计模式l“每一个模式描述了一个在我们周围不断重复 发生的问题,以及该问题的解决方案的核心 。这样,你就能一次又一次的使用该方案而 不必做重复劳动” Christopher Alexander 四个基本要素l模式名字l助记名,模式词汇表,交流l问题l在何时使用模式l解决方案l提供设计问题的抽象描述和怎样用元素组合解决问题l效果l描述了模式应用的效果及使用模式应权衡的问题,包括 对系统的灵活性,扩充性或可移植性的影响23种设计模式lAdapter:将一个类的接口

2、转换成客户希望的另一个 接口,使得不兼容的类可以一起工作lBridge:将抽象部分与它的实现部分分离,使他们可 以独立的变化。lBuilder:将一个复杂的对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。lChain of Responsibility:为解除请求的发送者和接受 者之间的耦合,而使多个对象都有机会处理这个请求 。将使对象连成一条链,并沿着这条链传递该请求, 直到有一个对象处理它。lCommand: 将一个请求封装为一个对象,从而使你 可以使用不同的请求对客户进行参数化,对请求排队 或者记录请求lDecorator: 动态的给一个对象添加一些额外的职责。 就扩展

3、功能而言,其比生成子类方式更为灵活。lFacade:为子系统中的一组接口提供一个一致的界面 ,其定义了一个高层接口,使子系统使用更加容易。lFactory Method: 定义一个用于创建对象的接口,让 子类决定将那个类实例化,其使一个类的实例化延迟 到了其子类。lFlyweight: 运用共享技术有效的支持大量细力度的对 象。lInterpreter:给定一个语言,定义他的文法的 一种表示,并定义一个解释器,改解释器使 用改表示来解释语言中的句子lIterator:提供一种方法顺序访问一个聚合对象 中各个元素,而又不需要暴露该对象的内部 表示lMediator:用一个中介对象来封装一系列的对

4、 象交互。中介者使各对象不需要显示的相互 引用,从而使其耦合松散,而且可以独立的 改变他们的交互。lMemento:在不破坏封装性的前提下,捕获一 个对象内部状态,并在该对象之外保存状态 ,这样以后就可将该对象恢复到保存的状态lObserver: 定义对象间的一种一对多的依赖关 系,以便当一个对象的状态发生改变时,所 有依赖于它的对象都得到通知和刷新。lPrototype:用原型实例指定创建对象的种类, 并且通过拷贝这个原型来创建新的对象lProxy:为其它对象提供一个代理以控制对这 个对象的访问lSingleton: 保证一个类仅有一个实例,并提供 一个访问它的全局访问点。lState: 允

5、许一个对象在其内部状态改变时改 变它的行为。对象看起来修改了它所属的类lStrategy:定义一系列的算法,把他们封装起 来,并且时他们可相互替换。本模式使得算 法的变化可独立于使用它的客户。lTemplate Method :定义一个操作中的算法的 骨架,而将一些步骤延迟到子类中。lVisitor: 表示一个作用于某对象结构中各元素 的操作。他使你可以在不改变各元素的类的 前提下作用于这些元素的新操作目的:描述模式用来完成什么工作的 创建型模式与对象的创建有关; 结构型模式处理类或对象的组合; 行为型模式对类或对象怎样交互和分配职责进行描述 范围:描述模式是主要用于类还是用于对象的。 关系:

6、 Composite常和Iterator或Visitor一起使用; Prototype常用来替代Abstract Factory Composite和Decorator的结构图很相似设计模式怎样解决设计问题 一l寻找合适的对象l设计的许多对象来源于现实世界的分析模型,但是设计 结果得到的类通常在世界上并不存在。l决定对象的粒度l对象在大小和数量上变化极大,Faade, Flyweight 应付 完整的子系统,支持大量的细粒度对象l其它的设计模式描述了将一个对象分解成许多小对象的 特定方法 ,设计模式怎样解决设计问题 二l指定对象的接口l通过确定接口的主要组成部分以及接口发送的数据类型,来帮 助

7、定义接口,还会告诉你接口中不应包括那些东西lMemento :他描述了怎样封装和保存对象内部状态l制定了接口之间的关系lDecorator,proxy 要求对象的接口和被修饰的对象和受委托的 对象一致l描述对象的实现l类继承和接口继承l对接口编程而不是对实现编程l创建型模式确保系统采用针对接口的方式书写,而不是针对实 现设计模式解决设计问题 三 复用机制l继承和组合的比较l类继承是白盒复用,父类的内部细节对子类可见l对象组合是类继承之外的另一种复用选择。新的复杂的 功能可以通过组装或者组合对象来获得。对象组合要求 被组合的对象具有良好定义的接口,黑盒复用。优缺点:l类继承在编译时期静态定义,运

8、行时无法改变从父类继 承的实现。继承对子类揭示了其父类的实现细节,破坏 了封装性,子类的实现与它的父类依赖紧密,父类实现 中任何变化必然导致子类发生变化。复用机制委托l委托(delegation)是一 种组合方法,它使组合 具有与继承同样的复用 能力。l两个对象参与处理一个 请求。委托不足l动态的,高度参数化的软件比静态软件更能 于理解。l运行时低效问题。继承与参数化类型的比较l参数化类型l类属(generic) 或 模板(templates) l不同处:对象组合技术允许你在运行时刻改变被组合的行 为,存在间接性,比较低效。继承允许你提供操作的 缺省实现,并通过子类重定义这些操作。参数化 类型

9、允许你改变类所用到的类型。但是继承和参 数化类型都不能在运行时刻改变。设计模式在三类主要软件中的作用l应用程序l工具箱l框架应用程序l内部复用性,可维护性,可扩充性l设计模式的作用:减少依赖性来提高内部复用性对系统分层和限制对平台的依赖性提高可维护性通过显示怎样扩展层次结构和怎样使用对象复用 增强系统的扩充性工具箱l工具箱是一组相关的,可复用的类的集合, 这些类提供了通用的功能。lC+ I/O流库l强调代码复用l比应用设计要难的多。框架(Framework) 一l构成一类特定软件可复用设计的一组相互协 作的类。l图形编辑器,跨平台软件,财务建模应用l可以定义框架抽象类的应用相关的子类,从 而将

10、一个框架定制为特定的应用l定义了整体结构,类,对象的分割,各部分 的主要责任,类和对象怎么协作,以及控制 流程,更强调设计复用框架(Framework) 二l反向控制(inversion of control)l框架难度最大,所有框架应尽可能灵活可扩 充l成熟的框架通常使用多种设计模式,设计模 式有助于获得无需重新设计就可适用于多种 应用的框架体系结构框架与设计模式的区别l设计模式比框架更抽象l设计模式是比框架更下的体系结构元素l框架比设计模式更加特例化实例研究 设计一个文档编辑器Lexil所见即所得l文本与图形的混合l不同的格式l下拉菜单,滚动条Lexi设计的7个问题l文档结构 :编辑,格式

11、安排,显示和文本分 析l格式化:安排文本和图形到行列l修饰用户界面:滚动条,阴影l支持多种视感: look and feell支持多种窗口系统: 独立与窗口系统l用户操作: l拼写检查和连字符文档结构l对字符,线,多边形和其它图形元素的安排l作者不将元素看作图形项,而是看作文档的 物理结构行,列,图形,表,或子结构。l用户界面应该让用户直接操纵这些子结构, 如用户应该能将一个图表当成一个单元。l文档的内部表示描述物理结构。文档结构l内部表示应该支持:保持文档的物理结构可视化生成和显示文档根据显示位置来映射文档内部表示的元素。文档结构 (续)l一些约束我们应该把字符和图形统一对待我们的实现不应该

12、过分强调内部表示单个元素和 元素组之间的差别。如第5行第2列的第10个元素 既可以是字符,也可以是一个复杂图表。l递归组合通用的方式描述层次结构信息文档结构 (续)l图元 Glyphs出现在文档结构中的所有对象定义一个抽象类图 元,它的子类包括基本图形元素和结构元素(行 ,列)三个基本功能,图元应该知道:l怎么样画自己,占用多大的空间,父图元和子图元lComposite模式描述了面向对象的递归组合的本质图元子类的重载lGlyph子类重定义了Draw操作 如Rectangle可 能如此定义:void Rectangle:Draw ( Window * w) w - DrawRect (_x0,

13、_y0, _x1, _y1); lBounds方法返回图元占用的矩形区域lIntersects判断一个点是否和图元相交格式化l构造特殊物理结构对应于恰当格式化的文档 。l表示和格式化是不同的,记录文档物理结构 的能力并没有告诉如何得到一个特殊格式化 结构。lLexi必须考虑文本分行,行分列,考虑边界 宽度,缩进,表格l“格式化”限制为将一个图元分解为若干行l formatting = linebreaking封装格式化算法l因为格式化算法趋于复杂化,因而可以考虑 将它们包含于文档结构之中,但最好是将它 们彻底独立于文档结构之外。理想情况下, 我们能够自由地增加一个G l y p h子类而不用

14、考虑格式算法。反过来,增加一个格式算法 不应要求修改已有的图元类。l易于改变格式化算法 Compositor和Composition一个C o m p o s i t i n在创建 时得到一个C o mp o s i t o r子 类实例 能封装格式化算法的对象定义 一个C o m p o s i t o r类 C o m p o s i t i o n对象只包含 组成文档基本内容的可见图元 策略模式 lC o m p o s i t o r就是S t r a t e g y。它们封装 了不同的格式算法。C o m p o s i t i o n就是C o m p o s i t o r策略的

15、环境。lS t r a t e g y模式应用的关键点在于为S t r a t e g y和它的环境设计足够通用的接口,以支持 一系列的算法 l 支持多种视感标准 l获得跨越硬件和软件平台的可移植性是系统 设计的主要问题之一 l移植的一大障碍是不同视感标准之间的差异 性 l设计目标就是使L e x i符合多个已存在的视感 标准,并且在新标准出现时要能很容 易地增加对新标准的支持。我们也希望我们 的设计能支持最大限度的灵活性:运行时刻 可以 改变L e x i的外观和感觉 对象创建的抽象l窗口组件是关于用户界面上作为控制元素的按钮、滚 动条和菜单等可视图元的另一个术语 l假定用两个窗口组件图元集

16、合来实现多个视感标准 1) 第一个集合是由抽象G l y p h子类构成的,对每一种窗口 组件图元都有一个抽象G l y p h子类。例如,抽象子类S c r o l l B a r放大了基本的G l y p h接口,以便增加通用的滚动 操作; B u t t o n是用来增加按钮有关操作的抽象类;等等 。2) 另一个集合是与抽象子类对应的实现不同视感标准的具体 的子类的集合 工厂类和产品类 lScrollBar* sb = new MotifScrollBar;lScollBar* sb = guiFactory-CreateScrollBar();l这里g u i F a c t o r y是M o t i f F a c t o r y类的实例 。C r e a t e S c r o l l B a r为所需要的视感返回一个 合适的 S c r o l l B a r子类的新的实例,如M o t i f

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号