装饰者模式——灵活变幻你的对象

装饰者模式允许在不改变现有对象的情况下动态添加新功能。本文介绍了装饰者模式的基本概念、参与者角色及其应用场景,如ListView控件如何通过装饰者模式获得滚动条等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰者模式:动态的给一个对象添加一些额外的职责。我们知道,使用继承机制创建子类是增加新功能的一个方式,但这为整个子类都添加了该功能,

有时候我们需要随时动态的为对象添加新的功能,可以任意灵活的组合新的功能装饰对象。此时,装饰者模式提供了一个很好的解决方案,它可以使你透明地

嵌套多个装饰者,为对象添加任意多的功能。

模式参与者:

component:定义一个对象接口,可以给这些对象动态的添加职责。

ConcreteComponent:component的子类,可以给这些对象添加职责。

decorator:component的子类,与component有完全一致的接口,并且维护component对象的指针,通过该指针转发请求给component。

ConcreteDecorator:装饰子类,为组件添加某一职责。

模式结构图如下:



ConcreteDecorator,ConcreteComponent的公共父类都是component,公共接口完全一致,只是装饰子类会重定义相关操作,在客户使用component接口

编程时,不需要关心组件是否被装饰,被什么装饰,使得客户对组件的使用透明。

当我们使用一个listview显示信息时,刚开始我们并不需要一个漂亮的滚动条,当信息存储数满屏时,此时我们需要一个滚动条了,这时,我们就可以使用

经过scrollDecorator装饰的listview对象,客户完全不知道listview对象的变化,只是在draw()的时候就有了滚动条,因为装饰子对象重写了draw()方法。

其实,在很多编辑工具中,当我们选中某些单选框来添加新特性时,就可以认为为基本对象做了一次装饰。PS中的各种效果作用于图片对象,使得图片具有

各种各样的效果,也可由装饰者实现,使用装饰者,可以使一张图片组合任意的图片效果(装饰),也可轻松去掉某一效果,添加新的效果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值