版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中生2025年高考自主说课稿
- 职业人群心理压力与应对护理
- 上海工商职业技术学院《安检设备原理与维修》2025-2026学年第一学期期末试卷(B卷)
- 上海工商职业技术学院《安全工程信息技术与管理》2025-2026学年第一学期期末试卷(B卷)
- 上海工商职业技术学院《AI 设计基础》2025-2026学年第一学期期末试卷(B卷)
- 小学生积极暗示说课稿
- 初中生2025语文戏剧融合说课稿
- 上饶卫生健康职业学院《Android 系统及开发》2025-2026学年第一学期期末试卷(A卷)
- 胃肠外科患者护理质量评价
- 小学主题班会爱国2025说课稿
- 波动光学及医学应用-课件
- 不同水质与底质条件对沉水植物的生长影响差异研究的开题报告
- 一年级-民族团结教育主题班会
- 小动物常规临床检查皮肤
- 三好三维构造识图题库
- TCCUA 003-2019 金融信息科技服务外包风险管理能力成熟度评估规范
- 湖北省建筑工程施工统一用表(2023年版全套)
- 烟草专卖违法行为课件
- YY/T 0634-2022眼科仪器眼底照相机
- GB/T 3934-2003普通螺纹量规技术条件
- GB/T 28387.2-2012印刷机械和纸加工机械的设计及结构安全规则第2部分:印刷机、上光机和印前机械
评论
0/150
提交评论