装饰器模式

原创 2013年12月03日 11:21:33

一:装饰器涉及四个名词
1、接口或者抽象基类
2、被装饰对象,也就是一个简单的实现了1中提到的接口或者抽象基类的实现类。
3、装饰对象,就是去装饰被装饰对象的对象
4、继承装饰对象类的子类,也就是具体的装饰器类了。

使用场景

1、装饰器模式主要装饰供外部调用的接口方法,如果一个接口方法只是提供给内部调用,则不能使用该模式。
2、装饰器模式主要装饰可能要改变的接口方法,如果类中的某种行为在将来可能发生变化,而你又懒得去改变
   原来的类,那么就可以考虑使用装饰器模式了。

 

           装饰模式是用于对象的创建,而此对象的创建基于原来对象的加强,也就是通过原组件对象的参数传递,把此对象层层加强。例如:
           BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    通过层层的参数传递,把InputStream适配为InputStreamReader再装饰加强为BufferedReader这里的参数的传递是关键,是通过引用而非继承方式

 

        装饰器中的继承的实质是为了类的兼容的需要,便于参数引用可以层层传递兼容 ,而不是通过继承实现功能的扩展,功能扩展主要在实例的引用。一般来说是纵向结构,如果只是一层继承实现,其余装饰类用横向实现的话,也是可以的,但是这个和纵向相比没有什么不同。


      装饰器模式主要由两部分组成,一部分是组件另一部分是装饰器 。组件是本体,也就是初始的、最里层的参数;组件是加强件,供功能扩展时使用,顶层装饰器拥有组件的引用,装饰类可以任意组合。 其对象具有怎样的功能并不是决定于其继承结构和层次,而是在这个对象构造的时候使用到了那些类的引用,那其功能就是这些对象的总功能。 装饰器一般有一个抽象装饰器作为其顶级装饰器,包括共享的属性和方法。而抽象装饰器的所有子类从原则上来说是平等的,彼此不依赖,以便于对象构造时的功能组装。 纯净的装饰器没有扩展方法。

优点:
    装饰器与继承的目的都是扩展对象的功能,但装饰器提供了比继承更大的灵活性,可以动态的决定是“粘上”还是“去掉”一个装饰。通过使用不同的具体装饰类和这些类的排列组合,可以创建出很多不同行为的组合。
 缺点:
    装饰器比继承关系使用更少的类,但比继承关系使用更多的对象,更多的对象会使查错变得更困难,特别是这些对象看上去很像的时候。

装饰器模式在IO流当中的应用

这几天在写编译原理的实验,语言不限,我就用java写了一下,程序核心部分没有什么问题,调了几下就可以调通了,但是实验规定,词法分析后得到的二元式必须写入文件里,而且必须是16位字符+空格+两位数字的形...
  • qq_28352347
  • qq_28352347
  • 2017年05月09日 15:03
  • 278

设计模式 —— 装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern)概念 装饰器模式 允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的。...
  • wwh578867817
  • wwh578867817
  • 2016年05月23日 11:46
  • 832

JAVA IO之装饰器模式(Head first 设计模式之装饰器模式)

InputStream是IO中装饰器模式的顶层,现在我们讨论一下装饰器模式。顾名思义,动态的将责任附加到对象上,如要扩展功能,装饰者提供了比继承更加有弹性的方案。 装饰器模式:首先,装饰者和被装饰者...
  • wangzhenfei444
  • wangzhenfei444
  • 2016年06月20日 16:01
  • 593

五分钟一个设计模式之装饰器模式

五分钟一个设计模式,用最简单的方法来描述设计模式。查看更多设计模式,请点击五分钟一个设计模式系列 http://blog.csdn.net/daguanjia11/article/category/...
  • daguanjia11
  • daguanjia11
  • 2015年06月03日 06:12
  • 4328

[设计模式](一)装饰器模式的意义

设计模式的博客比较多,但好多为了表述的严谨性,理解起来让人有些疑惑。从本篇开始希望用自己粗浅简易的语言,来描述几种比较有困惑的设计模式在实际运用中的意义。...
  • stephzcj
  • stephzcj
  • 2017年05月22日 09:58
  • 220

[设计模式]-装饰器模式(Decorator)

定义: 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。 对象结构型模式...
  • qust_2011
  • qust_2011
  • 2016年11月30日 19:15
  • 485

设计模式之装饰器模式(C++)

装饰器模式(DECRATOR):为了实现动态的给对象添加职能,即从外部给对象添加相关职能。可以这样理解,比如说一个Person类,该类的操作有能吃、能睡、能跑、但假如随着人类的进化,某一天Person...
  • hailong0715
  • hailong0715
  • 2016年06月24日 11:39
  • 1538

javascript装饰器模式

众所周知装饰器模式用于给对象在运行期间动态的增加某个功能,职责等。相较通过继承的方式来扩充对象的功能,装饰器显得更加灵活,首先,我们可以动态给对象选定某个装饰器,而不用hardcore继承对象来实现某...
  • lc598470345
  • lc598470345
  • 2015年06月19日 09:42
  • 1473

Android设计模式之装饰器模式

截止目前为止,我已经学了四个设计模式了,首先回顾一下这几天学习设计模式的感悟,第一个接触的当然就是单例模式了,单例模式由于将构造方法私有化,因此在类的外面不能创造该类的对象,那么问题来了,那我们就在类...
  • u014675538
  • u014675538
  • 2016年03月27日 11:24
  • 479

Java 装饰器模式详解

转载请注明出处: 在上面的几篇文章中,着重介绍了java 中常见的`IO` 相关知识,在学习的过程中,发现IO包中是用了大量的装饰器模式,为了彻底的学习IO,今天就来揭开装饰器模式的面纱。 为...
  • zhaoyanjun6
  • zhaoyanjun6
  • 2017年02月22日 16:22
  • 375
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:装饰器模式
举报原因:
原因补充:

(最多只允许输入30个字)