Design Pattern - 装饰模式

简介:

装饰模式

动态 地给一个对象 添加一些额外的职责 。就增加功能来说,Decorator模式相比生成子类更为灵活。 
对于对象功能的扩展, 面向对象一般通过继承来解决, 但这种方式缺乏灵活性, 而且随意定义子类容易导致类层次结构过快膨胀. 
场景, 当类的核心职责和主要行为没有发生变化, 仅仅需要动态对类对象添加一些装饰性的功能, 比如给人穿衣服...... 
如下图所示, 只是为图画换换边框, 这种改动只需要使用下面介绍的装饰模式.

 
装饰模式实现, 如下代码,

class Component    //核心类 
{ 
    void Operation(); 
}

class Decorator: Component //装饰类, 必须继承自核心类, 第一是要保持接口一致, 更重要的是, 这样可以嵌套装饰 
{ 
    protected Component com; //核心类对象(引用, 需多态) 
    void setComponent (Component com) {this.com = com} 
    void Operation()  
    {  
        com.Operation() //这儿除了调用核心类的功能, 可以任意添加装饰性功能 
    } 
}

客户代码使用, 

com = new Component() 
dec = new Decorator() 
dec.setComponent(com) 
dec.Operation() //这个Operation就是经过装饰的

装饰模式如下图, 我们可以创建一个抽象Decorator类, 然后根据需要创建许多的ConcreteDecroator类. 而Decorator类可以装饰任意Component类. 
而且Decorator类只是对核心类对象进行动态装饰, 不会影响到核心类本身, 所以可以任意装饰, 加成员变量, 调用其他函数, 如ConcreteDecroatorA, ConcreteDecroatorB. 
且Decorator类本身也是Component类, 所以可以嵌套装饰, 非常的强大, 

com = new Component() 
dec_a = new ConcreteDecroatorA() 
dec_b = new ConcreteDecroatorB() 
dec_c = new ConcreteDecroatorC() 
dec_a.setComponent(com) 
dec_b.setComponent(dec_a) 
dec_c.setComponent(dec_b) 
dec_c.Operation() //这个Operation就是经过多次装饰的

image

装饰模式的好处, 
首先, 有效的将类的核心职能和装饰功能区分开了, 动态装饰完全不会影响核心类 便于维护, 可复用性强. 
其次, 有效的解决了子类的快速膨胀的问题, 如果单纯用继承来解决问题, 不但对于装饰A,B,......各需要子类, 而且对于各种装饰的组合也需要创建子类. 当装饰种类很多时, 可想而知那会创建非常多的子类. 而使用装饰模式, 只需要对每个装饰生成子类, 而装饰的组合和搭配只需要嵌套使用装饰模式就可以达成. 
这个模式还是很实用, 很强大的, 可以用于很多场景......

具体实用例子参考, http://www.cnblogs.com/fxjwind/archive/2013/02/08/2909294.html


本文章摘自博客园,原文发布日期:2013-02-05

目录
相关文章
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
611 214
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
850 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1273 157
|
5天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
241 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
526 109