装饰器模式

1. 使用场景

当希望在运行时对某一对象的行为做出增强或改变,但又不想通过对目标对象进行子类扩展时。

2. 实现举例

1) BufferedReader

BufferedReader 它继承自Reader抽象类,可以对已有的其它Reader对象添加缓冲的功能,并且扩展了一个方法readLine()对原有的Reader进行了增强。

2) HttpServletRequestWrapper

HttpServletRequestWrapper 实现了HttpServletRequest接口,可以通过方法重写对已有的其它HttpServletRequest对象的方法行为做增强或改变。 例如:struts2框架利用它重写了getAttribute(String)方法的行为,不仅会在原有的request作用域查找变量,还会在struts2的值栈中查找变量,目的是让jsp页面中仍可以按原来的习惯使用EL表达式。

3. 特点

  • 装饰器模式相对于继承更为灵活,不需要对被装饰对象进行子类扩展
  • 装饰器自身是使用了继承+组合的思想
  • 装饰器类和被装饰类有共同的特点,它们都有相同的父类或接口
  • 对比代理模式,装饰器模式会被增强父类或接口的功能,而代理模式不会;装饰器注重的是,代理注重的是

results matching ""

    No results matching ""