结构型模式精选文档.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《结构型模式精选文档.ppt》由会员分享,可在线阅读,更多相关《结构型模式精选文档.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、结构型模式结构型模式本讲稿第一页,共三十七页课程目标课程目标q 结构型模式概述结构型模式概述q Adapter模式模式q Bridge模式模式q Composite模式模式q Decorator模式模式q Faade模式模式q Flyweight模式模式q Proxy模式模式 本讲稿第二页,共三十七页体验项目体验项目 使用使用Composite模式来编写如图模式来编写如图3-1所示的二叉树,然后使用深度优先搜索法遍所示的二叉树,然后使用深度优先搜索法遍历该二叉树,并打印出根节点的高度,运行效果如图历该二叉树,并打印出根节点的高度,运行效果如图3-2所示。所示。图3-1二叉树图 图3-2 二叉树
2、遍历结果图本讲稿第三页,共三十七页结构型模式概述结构型模式概述 结构型模式是为解决怎样组装现有的类,设计他们的交互方式,从而达到实现一定的功能结构型模式是为解决怎样组装现有的类,设计他们的交互方式,从而达到实现一定的功能的目的。同时,结构型模式包容了对很多问题的解决,例如扩展性的目的。同时,结构型模式包容了对很多问题的解决,例如扩展性(外观模式,组成模式,外观模式,组成模式,代理模式,装饰模式),封装性(适配器模式,桥接模式)。代理模式,装饰模式),封装性(适配器模式,桥接模式)。结构型模式中解决了以下几个问题:结构型模式中解决了以下几个问题:在不破坏类封装性的基础上,实现新的功能。这一点包括
3、装饰模式,代理在不破坏类封装性的基础上,实现新的功能。这一点包括装饰模式,代理模式。模式。在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。这一点包在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。这一点包括桥接和适配器模式。括桥接和适配器模式。创建一组类的统一访问接口,这是组成模式。创建一组类的统一访问接口,这是组成模式。对同一类创建不同的访问界面,提供给不同需要的访问者,这是外观模式。对同一类创建不同的访问界面,提供给不同需要的访问者,这是外观模式。本讲稿第四页,共三十七页Adapter模式模式 适配器模式有类适配器和对象匹配器两种形式。其中类适配器使用多继承(
4、由于适配器模式有类适配器和对象匹配器两种形式。其中类适配器使用多继承(由于java不支不支持多继承,所以可以引入接口的概念)来实现一个接口对另一个接口的匹配,对象适持多继承,所以可以引入接口的概念)来实现一个接口对另一个接口的匹配,对象适配器主要依赖于对象组合来实现接口的匹配。比如配器主要依赖于对象组合来实现接口的匹配。比如java窗体事件处理的事件适配器窗体事件处理的事件适配器就是一个很好的例子。就是一个很好的例子。模式介绍模式介绍 主要适用于以下情况:主要适用于以下情况:使用一个已经存在的类,而它的接口不符合你的需求。使用一个已经存在的类,而它的接口不符合你的需求。创建一个可以复用的类,该
5、类可以与其他不相关的类或不可预见的类(即创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。那些接口可能不一定兼容的类)协同工作。使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口,仅适用于对象适配器。象适配器可以适配它的父类接口,仅适用于对象适配器。本讲稿第五页,共三十七页Adapter模式结构图模式结构图适配器模式结构图如下:适配器模式结构图如下:类适配器结构图 对象适配器结构图 Target:定义:定义Client
6、使用的与特定应用或领域相关的接口。使用的与特定应用或领域相关的接口。Adaptee:定义一个已经存在的类,该类需要适配。:定义一个已经存在的类,该类需要适配。Adapter:对:对Adaptee类和类和Target接口进行适配。接口进行适配。Client通过通过Adapter实例对象来实例对象来调用某些方法,然后适配器调用调用某些方法,然后适配器调用Adaptee的方法来实现请求的方法来实现请求本讲稿第六页,共三十七页适配器模式示例适配器模式示例比如我们编写过两个类,分别用于画圆形桩和方形桩,假设现在有一个应用,需要既比如我们编写过两个类,分别用于画圆形桩和方形桩,假设现在有一个应用,需要既画
7、方形桩,又要画圆形桩,就可以使用该模式实现。画方形桩,又要画圆形桩,就可以使用该模式实现。使用对象适配器使用对象适配器 模式实现如下:模式实现如下:public class DrawRoundpublic void displayRound(String msg)System.out.println(DrawRound displayRound():+msg);public class DrawSquarepublic void displaySquare(String str)System.out.println(DrawSquare displaySquare():+str);public
8、 class ShapeAdapter extends DrawSquareprivate DrawRound round;public ShapeAdapter(DrawRound r)this.round=r;public void insertRound(String str)round.displayRound(str);本讲稿第七页,共三十七页使用类适配器使用类适配器 模式实现如下:模式实现如下:public interface DrawRoundInterfacepublic void displayRound(String msg);public class DrawRound
9、implements DrawRoundInterface public void displayRound(String msg)System.out.println(DrawRound displayRound():+msg);public class ShapeAdapter extends DrawSquare implements DrawRoundInterfaceprivate DrawRound round;public ShapeAdapter(DrawRound r)this.round=r;public void displayRound(String msg)round
10、.displayRound(msg);/doSomethingpublic class Client public static void main(String args)ShapeAdapter d=new ShapeAdapter(new DrawRound();d.insertRound(圆形圆形);d.displaySquare(方形方形);本讲稿第八页,共三十七页Adapter模式模式优势和不足优势和不足 类适配器的优缺点如下类适配器的优缺点如下:用一个具体的用一个具体的Adapter类对类对Adaptee和和Target进行匹配。结果是当我们想要匹配进行匹配。结果是当我们想要匹配
11、一个类以及所有它的子类时,类一个类以及所有它的子类时,类Adapter将不能胜任工作。将不能胜任工作。使得使得Adapter可以重定义可以重定义Adaptee的部分行为。的部分行为。对象适配器的优缺点如下:对象适配器的优缺点如下:允许一个允许一个Adapter与多个与多个Adaptee,即,即Adaptee本身以及它的所有子类(如果有本身以及它的所有子类(如果有子类的话)同时工作。子类的话)同时工作。使得重定义使得重定义Adaptee的行为比较困难。的行为比较困难。仅仅引入了一个对象,并不需要额外的引用(指针)以间接得到仅仅引入了一个对象,并不需要额外的引用(指针)以间接得到Adaptee。本
12、讲稿第九页,共三十七页Bridge模式模式在面向对象设计的基本概念中,对象这个概念实际上是由属性和行为两个部分组成的,在面向对象设计的基本概念中,对象这个概念实际上是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,一种抽象的。一般情况下,行为是包含在一个对象属性我们可以认为是一种静止的,一种抽象的。一般情况下,行为是包含在一个对象中,但是在有些情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,中,但是在有些情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,这就是桥接模式的用处。这就是桥接模式的用处。模式介绍模式介绍 主要适用于以下情况:主要适用于以下情况:不希望在
13、抽象和它的实现部分之间有一个固定的绑定关系。不希望在抽象和它的实现部分之间有一个固定的绑定关系。类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。点。本讲稿第十页,共三十七页Bridge模式结构图模式结构图桥接模式结构图如下:桥接模式结构图如下:Abstraction:定义抽象类(接口),并维护一个:定义抽象类(接口),并维护一个Implementor类型对象。类型对象。RefinedAbs
14、traction:抽象类的具体实现。:抽象类的具体实现。Implementor:实现层的抽象父类(接口),提供基本操作,以供抽象层次的类:实现层的抽象父类(接口),提供基本操作,以供抽象层次的类调用。调用。ConcreteImplementor:Implementor的具体实现。的具体实现。本讲稿第十一页,共三十七页Bridge模式示例模式示例public abstract class InforListInforlistFormat Format;public void setFormat(InforlistFormat Format)this.Format=Format;public In
15、forlistFormat getFormat()return this.Format;public abstract void distributeInforList();public abstract class InforlistFormatpublic abstract void formatImpl();public class StudentInforList extends InforListpublic void distributeInforList()System.out.println(这是学生信息单这是学生信息单);InforlistFormat format=this
16、.getFormat();format.formatImpl();public class TeacherInforList extends InforListpublic void distributeInforList()System.out.println(这是老师信息单这是老师信息单);InforlistFormat format=this.getFormat();format.formatImpl();public class HtmlFormat extends InforlistFormatpublic void formatImpl()System.out.println(使用
17、使用HTML格式生成格式生成);public class PlainTextFormat extends InforlistFormatpublic void formatImpl()System.out.println(使用纯文本格式生成使用纯文本格式生成);本讲稿第十二页,共三十七页Bridge模式优势和不足模式优势和不足 不足:不足:Bridge模式的应用一般用于模式的应用一般用于“两个非常强的变化维度两个非常强的变化维度”,有时即使有两个变化的维度,有时即使有两个变化的维度,但是某个方向的变化维度并不剧烈,换言之两个变化不会导致纵横交错的结果,并没必但是某个方向的变化维度并不剧烈,换言
18、之两个变化不会导致纵横交错的结果,并没必要使用要使用Bridge模式。模式。分离抽象部分及其实现部分。分离抽象部分及其实现部分。提高可扩充性。可以独立的对抽象部分和实现部分进行扩充。提高可扩充性。可以独立的对抽象部分和实现部分进行扩充。Bridge模式是比多继承方案更好的一种解决方法。模式是比多继承方案更好的一种解决方法。Bridge模式主要有以下一些优点:模式主要有以下一些优点:向客户隐藏了实现部分,从而当需要扩展向客户隐藏了实现部分,从而当需要扩展/更改实现部分时,不需要重新编译客户更改实现部分时,不需要重新编译客户代码。代码。本讲稿第十三页,共三十七页 Composite模式模式 Com
19、posite模式即合成模式,将对象组织到树结构中,可以用来描述整体与部分的关系。模式即合成模式,将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将简单元素与复合元素同等看待。如文件夹与文件就是合成模合成模式可以使客户端将简单元素与复合元素同等看待。如文件夹与文件就是合成模式的典型应用。式的典型应用。模式介绍模式介绍 主要适用于以下情况:主要适用于以下情况:需要表示对象的部分和整体的层次结构。需要表示对象的部分和整体的层次结构。希望用户忽略组合对象与单个对象的区别,用户将统一使用组合结构中希望用户忽略组合对象与单个对象的区别,用户将统一使用组合结构中的所有对象。的所有对象
20、。本讲稿第十四页,共三十七页 Composite模式结构图模式结构图合成模式结构图如下:合成模式结构图如下:Component:为组合中的对象声明接口,定义所有类共有接口的缺省行:为组合中的对象声明接口,定义所有类共有接口的缺省行为。为。Leaf:表示叶子节点,叶子节点没有子节点。:表示叶子节点,叶子节点没有子节点。Composite:所有可以包含子节点的类都扩展这个类。这个类的主要功能是用来:所有可以包含子节点的类都扩展这个类。这个类的主要功能是用来存储子部件,实现了接口中的方法。存储子部件,实现了接口中的方法。Client:通过接口操纵组合部件的对象。:通过接口操纵组合部件的对象。本讲稿第
21、十五页,共三十七页Composite模式示例模式示例public abstract class Computer protected String name;public Computer(String name)this.name=name;public abstract void getPart();import java.util.*;public class ComputerPart extends Computerprotected Vector part=new Vector();public ComputerPart(String name)super(name);public
22、void getPart()System.out.println(name);System.out.println(name+中的部件:中的部件:);for(int i=0;ipart.size();i+)Computer c=(Computer)part.get(i);c.getPart();public void add(Computer c)part.add(c);public void remove(Computer c)part.remove(c);public class ChildPart extends Computer public ChildPart(String name
23、)super(name);public void getPart()System.out.println(name);本讲稿第十六页,共三十七页Composite模式优势和不足模式优势和不足 Composite模式采用树形结构来实现普遍存在的对象容器,从而将模式采用树形结构来实现普遍存在的对象容器,从而将“一对多一对多”的的关系转化为关系转化为“一对一一对一”的关系,的关系,将将“客户代码与复杂的对象容器结构客户代码与复杂的对象容器结构”解耦解耦,解耦之后,客户端代码将与纯,解耦之后,客户端代码将与纯粹的抽象接口,而非对象容器的复内部实现结构,发生依赖关系,从而更能粹的抽象接口,而非对象容器的
24、复内部实现结构,发生依赖关系,从而更能“应对变化应对变化”。Composite模式中,是将模式中,是将“Add和和Remove等和对象容器相关的方法等和对象容器相关的方法”定义在定义在“表示抽象对象的表示抽象对象的Component类类”中,还是将其定义在中,还是将其定义在“表示对象容器表示对象容器的的Composite类类”中,是一个关乎中,是一个关乎“透明性透明性”和和“安全性安全性”的两难问题,的两难问题,需要仔细权衡。这里有可能违背面向对象的需要仔细权衡。这里有可能违背面向对象的“单一职责原则单一职责原则”,但是对于,但是对于这种特殊结构,这又是必须付出的代价。这种特殊结构,这又是必须
25、付出的代价。Bridge模式优点和不足:模式优点和不足:Composite模式在具体实现中,可以让父对象中的子对象反向追溯模式在具体实现中,可以让父对象中的子对象反向追溯 本讲稿第十七页,共三十七页Decorator模式模式 Decorator模式即装饰模式,是指动态的给一个对象添加一些额外的职责,在模式即装饰模式,是指动态的给一个对象添加一些额外的职责,在Java 的的IO操作中,经常会用到诸如如下的语句:操作中,经常会用到诸如如下的语句:模式介绍模式介绍 主要适用于以下情况:主要适用于以下情况:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加方法。在不影响其他对象的情况下,以动态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 模式 精选 文档
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内