《软件建模与实践》课件_7_软件设计模式-结构型模式.pptx
课程内容;课程目的;重点;结构型模式(StructuralPattern)关注如何将现有类或对象组织在一起形成更加强大的结构
不同的结构型模式从不同的角度组合类或对象,它们在尽可能满足各种面向对象设计原则的同时为类或对象的组合提供一系列巧妙的解决方案;7.1结构型模式概述;结构型模式一览表;7.2适配器模式;分析
现实生活:
不兼容:市电220V??笔记电脑20V
引入ACAdapter(交流电适配器)
软件开发:
存在不兼容的结构,例如方法名不一致
引入适配器模式;适配器模式的定义
将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。
对象结构型模式/类结构型模式;适配器模式的定义
别名为包装器(Wrapper)模式
定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的集合
;7.2.2适配器模式的原理与框架;适配器模式的三个角色
Target(目标抽象类)定义把其他类转换为何种接口,也就是我们的期望接口
Adapter(适配器类)核心角色
Adaptee(适配者类)源角色;7.2.3应用案例-没有源码的依赖库;软件公司开发人员面对这个没有源码的依赖库,遇到一个令人烦恼的问题:如何在既不修改现有接口又不需要任何算法库代码的基础上实现依赖库的重用?
通过分析得知,现在软件公司面对的问题有点类似最开始所提到的电压问题,文件操作接口FileOperation好比只支持20V电压的笔记本,而依赖库好比220?V的家庭用电,这两部分都没有办法再进行修改,而且它们原本是两个完全不相关的结构,如图7-2所示。;实例类图;7.2.4适配器模式的优缺点与适用环境;模式缺点
类适配器模式:(1)一次最多只能适配一个适配者类,不能同时适配多个适配者;(2)适配者类不能为最终类;(3)目标抽象类只能为接口,不能为类
对象适配器模式:在适配器中置换适配者类的某些方法比较麻烦
;模式适用环境
系统需要使用一些现有的类,而这些类的接口不符合系统的需要,甚至没有这些类的源代码
创建一个可以重复使用的类,用于和一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作
;7.3桥接模式;分析
蜡笔:颜色和型号两??不同的变化维度(即两个不同的变化原因)耦合在一起,无论是对颜色进行扩展还是对型号进行扩展都势必会影响另一个维度
毛笔:颜色和型号实现了分离,增加新的颜色或者型号对另一方没有任何影响
;分析
;在软件开发中如何将多个变化维度分离?
;桥接模式的定义
对象结构型模式;桥接模式的定义
又被称为柄体(HandleandBody)模式或接口(Interface)模式
用抽象关联取代了传统的多层继承
将类之间的静态继承关系转换为动态的对象组合关系
;7.3.2桥接模式的原理与框架;桥接模式的结构
桥接模式包含以下4个角色:
Abstraction(抽象类)
RefinedAbstraction(扩充抽象类)
Implementor(实现类接口)
ConcreteImplementor(具体实现类);桥接模式的实现;7.3.3应用案例-跨平台数据处理系统;初始设计方案;两个主要问题;两个独立变化的维度;改进之后的应用案例;基本结构说明;7.3.4桥接模式的优缺点与适用环境;模式缺点
会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程
正确识别出系统中两个独立变化的维度并不是一件容易的事情
;模式适用环境
需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系
抽象部分和实现部分可以以继承的方式独立扩展而互不影响
一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立地进行扩展
不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统
;7.4组合模式;Windows操作系统目录结构;分析
在树形目录结构中,包含文件和文件夹两类不同的元素
在文件夹中可以包含文件,还可以继续包含子文件夹
在文件中不能再包含子文件或者子文件夹
文件夹??容器(Container)
文件??叶子(Leaf);分析
当容器对象的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象并调用执行,牵一而动百,其中使用了递归调用的机制来对整个结构进行处理
由于容器对象和叶子对象在功能上的区别,在使用这些对象的代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下客户端希望一致地处理它们,因为对于这些对象的区别对待将会使程序非常复杂;如何一致地对待容器对象和叶子对象?
;组合模式定义
对象结构型模式;组合模式定义
又称为“部分-整体”(Part-Whole)模式
将对象组织到树形结构