在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(); }
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

最新文章

  1. java.io.Serializable 序列化接口
  2. mac系统使用帮助
  3. impress.js webslide 参数
  4. 【JAVA】数字相加
  5. 网页闯关游戏(riddle webgame)--游戏玩法和整体介绍
  6. ArcGIS API for Silverlight开发入门准备
  7. Linux 编程中的API函数和系统调用的关系【转】
  8. Android Jni变量对照表
  9. 分享几种Linux软件的安装方法
  10. 4_Is Prime
  11. ceph增加osd流程
  12. List集合就这么简单【源码剖析】
  13. Django extra 和 annotate
  14. ROS探索总结(十三)——导航与定位框架
  15. Ubuntu 16.04将左侧面板置于底部
  16. spark操作kudu之DML操作
  17. Debian 无线网卡驱动问题
  18. Page13:跟踪问题、最优控制[Linear System Theory]
  19. Iframe和Frame中实现cookie跨域的方法(转载)
  20. 嵌入式系统C编程之堆栈回溯(二)

热门文章

  1. POJ 1384 Piggy-Bank 背包DP
  2. Android异步操作总结
  3. UVA 11402 - Ahoy, Pirates!(段树)
  4. zend studio 安装emmet(zen coding)
  5. SAP ABAP规划 SY-REPID与SY-CPROG差额
  6. 在SQL2008中,如何让id自动生成并自动递增?如何让时间默认生成?
  7. S2SH新手框架结构的准备工作只需要导入这些文件
  8. grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)(转)
  9. oracle_控制用户权限
  10. PHP设计模式——备忘录模式