装饰(包装)模式

意图
装饰模式可在不改变原有对象的行为下,扩展其行为;
提供了比继承更有弹性的替代方案;

动态地给一个对象添加一些额外的职责;

别名:包装器(Wrapper)模式

来自Head First

  1. 装饰者和被装饰对象有相同的类型,这样客户端对象就可以用和真实对象相同的方式和装饰对象交互;
  2. 可用一个或多个装饰者包装一个对象;
  3. 在任何需要原始对象(被包装)的场合,可用装饰过的对象代替它(扩展原始对象的行为);
  4. 装饰者可在所委托被装饰者的行为之前或之后,加上装饰后的行为,以达到目的;
  5. 对象可在任何时候,被装饰,所以可以在运行时动态地、不限量的装饰者来装饰对象;
    6.装饰对象包含一个真实对象的引用;

示例类图:

Paste_Image.png

也可以将 被包装的类,放入 Decorator基类中,并设置成 protected类型的变量,这样做,其实更好,子类,就不需要维护 wrapped 对象了;

Paste_Image.png

装饰者模式中的角色

  1. 被装饰者抽象(Component):是一个抽象接口,或抽象类,也是该模式中的最元素的对象了;
  2. 被装饰者具体实现(ConcreteComponent),也是上图中的ComponentA;
    要装饰的就是这个具体的实现类,可以有多个,具体实现类,如: java io 体系;
  3. 装饰者基类(Decorator)可以是一个抽象类,或者类,用来实现被装饰者抽象(Component)中的方法,实现是通过 Componet 对象的引用来实现的;
  4. 装饰者实现,如上图中的(DecoratorA 与 DecoratorB)是具体的装饰者类,用来装饰最基本的类,如:ComponentA;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 4,051评论 4 67
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,970评论 1 15
  • 最近在学习MyBatis框架原理的时候,发现其实现二级缓存的过程中运用到了装饰者模式,所以来深入了解一下 介绍 装...
    就没一个昵称能用阅读 742评论 0 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 本篇文章介绍一种设计模式——装饰者模式。装饰者模式在Java中的典型应用就是IO流,在本篇文章中将有详细介绍。本篇...
    Ruheng阅读 22,300评论 13 56