`

第六章 装饰模式

 
阅读更多
装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

装饰模式是java编程中比较常见的设计模式。在java.io包下很多输入输出类都用到了装饰模式。
例:
InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
BufferedReader br = new BufferedReader(isr);
这是我们常用的写法,这里就用到了装饰模式。查看源码发现BufferedReader和InputStreamReader都继承自Reader类,BufferredReader在InputStreamReader的基础上增加了缓冲的功能,但同时又拥有InputStreamReader的大部分功能,这就是装饰模式的核心。

按照以上描述,让BufferredReader直接继承自InputStreamReader不就可以了吗,为什么还有使用装饰模式呢?java.io包下的文件处理类比较多,如果都采用直接继承的方式,那么会生成很多子类,增加了复杂性,另一方面,装饰模式提供了“即插即用”的方式,可以由用户动态决定加入其他功能的方式和时机。

ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorA d2 = new ConcreteDecoratorA();
d1.setComponent(c);
d2.setComponent(d1);
d2.Operation();

Decorator 装饰抽象类,继承了component,通过setComponent来对Component进行包装(Component是接口,实际是对ConcreteComponent 进行包装),因为是抽象类,在实际使用的时候使用的还是子类ConcreteDecoratorA ,因此是无需知道Decorator的存在。

这样每个装饰对象的实现就和如何使用这个对象分离开来,由setComponent方法进行添加。每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链中。

装饰模式有效的把类的核心职责和装饰功能区分开,而且可以去除相关类中重复的装饰逻辑。



分享到:
评论

相关推荐

    设计模式课程每章ppt(共27章).zip

    └── 设计模式 ├── 01_第1章_统一建模语言基础知识.ppt ├── 第10章_适配器模式.ppt ├── 第11章_桥接模式.ppt ...├── 第6章_抽象工厂模式.ppt ├── 第7章_建造者模式.ppt ├── 第8章_原型模式.ppt

    php设计模式介绍

    《PHP设计模式介绍》第六章 伪对象模式 《PHP设计模式介绍》第七章 策略模式 《PHP设计模式介绍》第八章 迭代器模式 《PHP设计模式介绍》第九章 观测模式 《PHP设计模式介绍》第十章 规范模式 《PHP设计模式...

    C#设计模式 C# Design Patterns:A Tutorial

    第6章 UML图 第7章 C#中的数组、文件和异常 第二部分 创建型模式 第8章 简单工厂模式 第9章 工厂方法模式 第10章 抽象工厂模式 第11章 单件模式 第12章 生成器模式 第13章 原型模式 第三部分 结构型模式 第14章 ...

    研磨设计模式(完整带书签).part2.pdf

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    java设计模式

    第6章 开闭原则 6.1 开闭原则的定义 6.2 开闭原则的庐山真面目 6.3 为什么要采用开闭原则 6.4 如何使用开闭原则 6.5 最佳实践 第二部分 我惹了谁——真刀实枪篇 第7章 单例模式 7.1 我是皇帝我独苗 7.2 单例模式的...

    研磨设计模式(完整带书签).part1.pdf

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    《设计模式实训教程》【PPT+类图与代码+样章】

    第6章模式联用与综合实例实训 6.1设计模式补充知识 6.1.1反射与配置文件 6.1.2GRASP模式 6.1.3架构模式与MVC 6.2模式联用实训 6.2.1适配器模式与桥接模式联用 6.2.2组合模式与命令模式联用 6.2.3外观模式与...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第6章 桥接(bridge)模式 52 第7章 职责型模式介绍 62 第8章 单例(singleton)模式 67 第9章 观察者(observer)模式 72 第10章 调停者(mediator)模式 85 第11章 代理(proxy)模式 97 第12章 职责链(chain of ...

    Delphi模式编程第一分卷

    第6章 建造者模式(Builder) 6.1 模式解说 6.2 结构和用法 6.2.1 模式结构 6.2.2 代码模板 6.3 范例与实践 6.3.1 一个数据集对象产品的建造者模式 6.3.2 范例小结 第7章 单例模式(Singleton) 7.1 模式...

    Delphi模式编程第二分卷

    第6章 建造者模式(Builder) 6.1 模式解说 6.2 结构和用法 6.2.1 模式结构 6.2.2 代码模板 6.3 范例与实践 6.3.1 一个数据集对象产品的建造者模式 6.3.2 范例小结 第7章 单例模式(Singleton) ...

    研磨设计模式-part2

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    研磨设计模式-part4

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    研磨设计模式-part3

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    研磨设计模式.part3(共4个)

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) ...

    研磨设计模式.part2(共4个)

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) ...

    研磨设计模式.part4(共4个)

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) ...

    研磨设计模式.part1(共4个)

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) ...

    Learning+PHP设计模式

    第6章 原型设计模式 第3部分 结构型设计模式 第7章 适配器模式 第8章 装饰器设计模式 第4部分 行为型设计模式 第9章 模板方法模式 第10章 状态设计模式 第5部分 MySQL和PHP设计模式 第11章 通用类负责连接,...

    ActionScript 3.0设计模式扫描版_方红琴译

    第6章 组合模式 什么是组合模式? 组合模式最小化示例 组合模式中关键的OOP概念 实例:歌曲播放列表 实例:利用反向运动学制作组合对象的动画效果 使用Flash内置的组合结构:显示列表 小结 第Ⅳ部分 行为...

    设计模式精解及面试攻略

    第6章阐释行为模式(职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者模式);第7章针对所有设计模式向初学者提供一些提示;第8章包括常见的面试问题及实际示例;第9章涵盖Java...

Global site tag (gtag.js) - Google Analytics