装饰模式 2.ppt_第1页
装饰模式 2.ppt_第2页
装饰模式 2.ppt_第3页
装饰模式 2.ppt_第4页
装饰模式 2.ppt_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 装饰模式,10/11/2020,1,装饰模式(别名:包装器) 动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。 Decorator Pattern(Another Name: Wrapper) Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.,一 、 概述,10/11/2020,2,装饰模式是动态地扩展一个对象的功能,而不

2、需要改变原始类代码的一种成熟模式。在装饰模式中,“具体组件”类和“具体装饰”类是该模式中的最重要的两个角色。,实例,10/11/2020,3,假设系统中有一个Bird抽象类以及Bird类的一个子类:Yinwu。 Yinwu类实现了Bird类的fly方法,使得Yinwu类创建的对象 调用fly方法能连续飞行100米。现在用户需要两种鸟,必须分别 能连续飞行150米和200米。,二、装饰模式模式的结构与使用,10/11/2020,4,装饰模式的结构中包括四种角色: 抽象组件(Component) 具体组件(ConcreteComponent) 装饰(Decorator) 具体装饰(Concrete

3、Decotator),10/11/2020,5,装饰模式的UML类图,抽象组件,具体组件,10/11/2020,6,装饰模式的结构的描述与使用,1抽象组件 : Bird.java public abstract class Bird public abstract int fly(); ,10/11/2020,7,装饰模式的结构的描述与使用,2具体组件 : Yinwu.java public class Yinwu extends Bird public final int DISTANCE=100; public int fly() return DISTANCE; ,10/11/2020,

4、8,装饰模式的结构的描述与使用,3装饰 (Decorator): Decorator.java public abstract class Decorator extends Bird protected Bird bird; public Decorator() public Decorator(Bird bird) this.bird=bird; ,10/11/2020,9,装饰模式的结构的描述与使用,4具体装饰(ConcreteDecotator): YinwuDecorator.java public class YinwuDecorator extends Decorator pub

5、lic final int DISTANCE=50; /eleFly方法能飞50米 YinwuDecorator(Bird bird) super(bird); public int fly() int distance=0; distance=bird.fly()+eleFly(); return distance; private int eleFly() /装饰者新添加的方法 return DISTANCE; ,10/11/2020,10,装饰模式的结构的描述与使用,5应用 Application.java public class Application public void nee

6、dBird(Bird bird) int flyDistance=bird.fly(); System.out.println(这只鸟能飞行+flyDistance +米); public static void main(String args) Application client=new Application (); Bird Yinwu=new Yinwu(); Bird YinwuDecorator1= new YinwuDecorator(Yinwu); Bird YinwuDecorator2= new YinwuDecorator(YinwuDecorator1); clie

7、nt.needBird(YinwuDecorator1); client.needBird(YinwuDecorator2); ,使用多个装饰者,接上例,现在需要构造飞行120米的鸟,飞行170米的鸟,飞行220米的鸟和飞行240米的鸟? 需要怎么做? 解决办法:只需要再构造一个装饰者,JAVA IO中的装饰模式,Java.io包中 Reader类(字符输入流类):抽象组件 FileReader类:具体组件 BufferedReader类:装饰,三、装饰模式的优点,10/11/2020,13,被装饰者和装饰者是松耦合关系。由于装饰(Decorator)仅仅依赖于抽象组件(Component),

8、因此具体装饰只知道它要装饰的对象是抽象组件的某一个子类的实例,但不需要知道是哪一个具体子类。 装饰模式满足“开-闭原则”。不必修改具体组件,就可以增加新的针对该具体组件的具体装饰。 可以使用多个具体装饰来装饰具体组件的实例。,四、应用举例,当前系统已有一个抽象类ReadWord,该类有一个抽象方法readWord(),另外还有一个ReadWord类的子类ReadEnglishWord,该类的readWord()方法可以读取一个由英文单词构成的文本文件word.txt。系统已有类的类图如图6.11所示。目前已有一些客户在使用该系统,并使用ReadWord类的对象调用readWord()方法读取文件中的单词。,四、应用举例,现有部分用户希望使用ReadWord类的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论