Java 实现装饰(Decorator)模式
在Java在。io反映非常多类包下是典型的装饰格局,例如:
new BufferedOutputStream(OutputStream out)
new BufferedInputStream(InputStream in);
new PrintWriter(OutputStream out)
new FilterReader(Reader in);
装饰类与被装饰的类 实现同样的接口,
被装饰类。不关心详细是哪个实现类来装饰它,
相同的业务方法,被装饰类调用装饰类的方法,增强装饰类的功能
演示样例:
类图
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamp3d21scDQ1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="370" height="240" alt="">
public interface IReader {
void read();
}
public class Reader implements IReader { @Override
public void read() {
System.out.println("read of Reader");
} }
public class BufferedReader implements IReader { private IReader mReader;
public BufferedReader(IReader reader) {
this.mReader = reader;
} @Override
public void read() {
System.out.println("read of BufferedReader");
mReader.read();
} }
/*
* 特点:
* (1) 装饰对象和真实对象有同样的接口。这样client对象就能以和真实对象同样的方式和装饰对象交互。
(2) 装饰对象包括一个真实对象的引用(reference)
(3) 装饰对象接受全部来自client的请求。它把这些请求转发给真实的对象。
(4) 装饰对象能够在转发这些请求曾经或以后添加一些附加功能。这样就确保了在执行时,不用改动给定对象的结构就能够在外部添加附加的功能。
在面向对象的设计中,一般是通过继承来实现对给定类的功能扩展。而装饰后,持有了真实对象,用以增强其功能。 装饰者与适配器模式的差别
关于新职责:适配器也能够在转换时添加新的职责,但主要目的不在此。装饰者模式主要是给被装饰者添加新职责的。 关于其包裹的对象:适配器是知道被适配者的具体情况的(就是适配类)。装饰者仅仅知道其接口是什么,
至于其具体类型(是基类还是其它派生类)仅仅有在执行期间才知道。 */
public class Test {
public static void main(String[] args) {
Reader reader = new Reader();
reader.read();
System.out.println("----------");
BufferedReader bufferedReader = new BufferedReader(reader);
bufferedReader.read(); }
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Java 实现装饰(Decorator)模式的更多相关文章
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- 【设计模式】Java设计模式 - 装饰者模式
Java设计模式 - 装饰者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自 ...
- 装饰(Decorator)模式
1.装饰(Decorator)模式 动态给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更为灵活.Component是定义一个对象接口.可以给这些对象动态地添加职责.Concre ...
- 从源码角度理解Java设计模式——装饰者模式
一.饰器者模式介绍 装饰者模式定义:在不改变原有对象的基础上附加功能,相比生成子类更灵活. 适用场景:动态的给一个对象添加或者撤销功能. 优点:可以不改变原有对象的情况下动态扩展功能,可以使扩展的多个 ...
- JAVA 设计模式 装饰者模式
用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式. 结构
- Java IO 装饰者模式
装饰模式(Decorator) 装饰模式又名包装(Wrapper)模式. 装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式通过创建一个包装对象,也就是装饰,来包裹真实的 ...
- JAVA之装饰者模式
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...
- Java设计模式の装饰者模式
目录 一.问题引入 二.设计原则 三.用装饰者模式解决问题 四.装饰者模式的特点 五.装饰者模式的定义 六.装饰者模式的实现 七.java.io包内的装饰者模式 一.问题引入 咖啡店的类设计: 一个饮 ...
随机推荐
- 如何插上U盘 自动复制内容
U盘插入自动复制,有效对付那些不肯给PPT的老师,还有一定几率拿到期末考试卷子···有图有真相!业界良心的好东西!!现在看还来得及!!! 代码优化了一下,把不是很重要的都删掉了,这次使用时看不出任何现 ...
- CSA 第五届研讨会 想象
参加第五届CSA云安全联盟研讨会. 人们太.所以,我们没有找到座位.立一个很长的时间.为了弥补没有时间坐在办公室.一个补回来.首先为大家介绍的信贷云,事实上独立: 信-使用-云 1. 信-使用-云 什 ...
- iOS开发- Xcode插件(一)-规范凝视生成器VVDocumenter
分享几个经常使用的Xcode插件. 第一个, 规范凝视生成器VVDocumenter. 顾名思义, 它能够非常方便的为你自己主动加入�凝视 使用效果例如以下: 下载链接:https://github. ...
- [Java][Android][Process] 分享 Process 运行命令行封装类型
我在以前的文章中提到,使用Java不会有一个问题,创建运行命令来创建太多进程后创建进程行语句. [Android] ProcessBuilder与Runtime.getRuntime().exec分别 ...
- 原生js判断css动画结束 css 动画结束的回调函数
原文:原生js判断css动画结束 css 动画结束的回调函数 css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画是否结束:即使是采用CSS技术生成动画效果,Jav ...
- memcached 实验论文
虽然在这个年龄段谈话memcached 它可能是一个有点晚,最为cached 在应用程序中redis 在之上,下面将谈谈自己的一些看法, 这个文件是不是memcached 理论描述,只写的实验数据和结 ...
- ueditor使用注意事项
1.js问题的介绍 第一ueditor型材 <script type="text/javascript" src="ueditor1_4_3-utf8-jsp/ue ...
- C# - Dictionary join keys or join Values
using System; using System.Collections.Generic; using System.Linq; using System.Text; public class P ...
- MysqL的root用户不允许远程连接
原文:MysqL的root用户不允许远程连接 今天程序报了异常:java.sql.SQLException: Access denied for user 'root'@'RJB-Z' (using ...
- React-Native基础教程
React-Native牛刀小试仿京东砍啊砍砍到你手软 React-Native基础教程 *React-Native基础篇作者git *React-Native官方文档 *Demo 几个月前faceb ...