装饰器模式

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

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

使用场景

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

 

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

 

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


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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

装饰器(Decorator)模式

  • 2014-12-22 12:10
  • 116KB
  • 下载

装饰器模式(Decorator)

1.认识装饰器模式     装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的...

装饰器设计模式

  • 2017-02-09 15:51
  • 178KB
  • 下载

装饰器模式

  • 2017-06-15 22:50
  • 145KB
  • 下载

装饰器模式(Decorator)

装饰器模式(Decorator)对客户透明的方式动态地给一个对象附加上更多的责任,同时又不改变其结构。装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。类图: 1.抽象构件(Compon...

设计模式-装饰器模式

  • 2016-11-30 21:29
  • 37KB
  • 下载

使用装饰器模式动态设置Drawable的ColorFilter

使用装饰器模式动态设置Drawable的ColorFilter欢迎各位关注我的新浪微博:微博转载请标明出处(kifile的博客)很多时候我们都希望Android控件点击的时候,有按下效果,选中时有选中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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