最新要闻
- 全球热头条丨漫威宇宙十大战力英雄:钢铁侠仅排第五
- 【世界新要闻】Intel花六个月造了一块乐高Arc显卡:1比1完美复刻!
- 世界观点:微信:2023年春节用户发红包超40亿次 竖屏春晚超1.9亿人观看
- 世界微动态丨Uzi再被冻结43万股权!公司与范丞丞合作
- 全球信息:国补退坡 上海延续新能源车置换补贴:单车补1万元
- 【全球时快讯】米哈游全新力作!《崩坏:星穹铁道》全平台预约已突破千万
- 今日热门!富豪刘銮雄拍卖76只爱马仕包:最贵一只200万
- 【全球时快讯】算法对算法!斯坦福大学推出DetectGPT:阻止学生用AI写作业
- 今日观点!2月2日或能肉眼看见5万年一遇的绿色彗星:正迅速逼近地球!
- 国内首家!统信操作系统成功获得商用密码产品认证证书
- 环球热点!“流浪地球”成功的概率有多高?你肯定想不到
- 当前视点!脑洞大开的机械键盘 内部竟搭CPU和GPU
- 天天百事通!阿里云推全国首个跨省域智慧大脑:汇聚江浙沪242项数据资源
- 全球资讯:不得不防!奥密克戎新变异毒株“双头犬”现身美国:已被世卫监测
- 最新快讯!40万级乱杀!全新国产奔驰GLC配置曝光:四款车型、两种外观
- 全球焦点!Gamerant赞《黑神话·悟空》:虚幻5打造《西游记》传说值得期待
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
装饰模式
装饰模式
一 场景
在软件开发中,我们有时候需要对一个已经存在对象的某个功能进行扩展。如果我们在这个对象的功能基础上进行修改,比如加入了新的字段,新的方法。这样就会增加原有对象的复杂度,不符合开闭原则。
有没有什么方法能既可以不改变原对象,又可以对对象的功能进行扩展了?装饰模式恰好针对这种情况提供了一个非常好的解决方案,它把要装饰的功能单独的封装在一个新的装饰类中,再让这个装饰类包装它所要装饰的原对象。在装饰类中既可以调用原对象的方法,还可以增加新的方法,以扩充原对象的功能。这样装饰模式就有效地把类的原核心功能和新增的装饰功能区分开,并去除了相关类中重复的装饰逻辑,符合了开闭原则。
二 定义
装饰模式动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式提供了比继承实现更为灵活的替代方案。
(相关资料图)
三 类图
Component(抽象构件类):抽象构件类一般被定义为一个接口或者是一个抽象类。具体构件类和抽象装饰类都是它的子类。在抽象构建类中定义了一些业务方法,具体构件类负责对这些业务方法给出具体的实现。
抽象构件类的引入,可以使客户端以一致的方式处理具体的构件对象和具体装饰对象。
ConcreteComponent(具体构件类):具体构件类是抽象构件类的子类,它实现了在抽象构件类中声明的业务方法,在装饰模式中就是对具体构件类中的业务方法给予增强,增加了额外的职责。
Decorator(抽象装饰类):抽象装饰类是具体装饰类的父类,它同时也是抽象构建类的子类。
在抽象装饰类主要是声明了用于给具体构件对象增加的职责,这些增加的具体职责是在具体装饰类中给予实现的。
在抽象装饰类中维护了一个对抽象构件对象的引用,通过这个引用可以调用未装饰的具体构件对象中的业务方法。
ConcreteDecorator(具体装饰类):具体装饰类是抽象装饰类的子类,负责向具体构件类中添加新的职责。
每一个具体装饰类都实现了一些新的用于增强行为的方法。它可以调用在抽象装饰类中定义的业务方法时候,可以增加这些新的方法,来扩充和增强原具体构件对象的业务方法,从而达到装饰的目的。
四 代码示例
我们平时会过很多节日,传统的节日有春节,洋节的话有圣诞节。过节的话,我们一般都会进行一些庆祝的活动。在节日中为了烘托气氛,我们会对家里进行一些装饰活动。以春节为例的话,我们一般会大门上贴春联,在屋檐下挂红灯笼,来装饰我们的房子,以此来烘托节日的气氛。针对以上情景,我可以使用装饰模式来进行设计。
我们定义一个IHoliday接口(抽象构件类)来表示抽象的节日,在接口中定义了一个庆祝的方法。
节日有很多种,我们可以以春节(具体构件类)为例,定义一个SpringFestival类。SpringFestival类继承了IHoliday接口,实现了celebrate()方法。
我们定义了一个抽象的节日装饰类AbstractHolidayDecorator(抽象装饰类),该类也实现了IHoliday接口,并在该类中维持了一个IHoliday实例的引用。IHoliday实例的引用是通过在构造函数中来赋值。
挂红灯笼是对节日的一种装饰,我们定义了HangRedLanternDecorator类(具体装饰类)。它继承了AbstractHolidayDecorator类,覆写了celebrate()方法。在原celebrate()方法中,增加挂红灯笼这个功能doHangRedLantern()。对原celebrate()方法进行了增强。
同理贴春联的子类也是一样
运行示例
运行结果
五 总结
装饰模式是一种对象结构型模式。它是为已有的功能动态地进行增强的一种方式。装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系来取代类之间的继承关系。
优点:
- 装饰模式可以动态的增强一个对象的功能,且比继承更加具有灵活性。装饰模式无需定义子类,不会导致类的个数急剧增加。
- 装饰模式把的装饰功能代码从原类中搬移去除,这样简化了原有的类。装饰模式有效地把类中的原有核心职责和新增的装饰功能区分开,使得系统易于维护。
- 装饰模式可以对一个对象进行多次装饰,我们可以根据需要有选择地、按顺序地使用装饰功能来多次包装对象,从而得到一个功能更为强大的对象。
缺点:
- 装饰模式中对于原对象每一种增加的功能,我们都需要对应的定义一个具体的装饰类。这样就会导致系统出现比较多的小类。
装饰模式
全球热头条丨漫威宇宙十大战力英雄:钢铁侠仅排第五
【世界新要闻】Intel花六个月造了一块乐高Arc显卡:1比1完美复刻!
环球资讯:【byob】 payload 生成过程
每日时讯![概率论与数理统计]笔记:5.1 点估计概述
热议:VMware vSphere ESXi 7.0安装配置
天天热点评!QPython实例01-获取所有短信并生成词云
世界观点:微信:2023年春节用户发红包超40亿次 竖屏春晚超1.9亿人观看
世界微动态丨Uzi再被冻结43万股权!公司与范丞丞合作
Blazor模式讲解
全球信息:国补退坡 上海延续新能源车置换补贴:单车补1万元
【全球时快讯】米哈游全新力作!《崩坏:星穹铁道》全平台预约已突破千万
今日热门!富豪刘銮雄拍卖76只爱马仕包:最贵一只200万
【全球时快讯】算法对算法!斯坦福大学推出DetectGPT:阻止学生用AI写作业
今日观点!2月2日或能肉眼看见5万年一遇的绿色彗星:正迅速逼近地球!
焦点资讯:Kubernetes监控手册06-监控APIServer
全球最资讯丨CRT&EXCRT(中国剩余定理和扩展中国剩余定理)
【新视野】学习笔记——redis事务、乐观锁、悲观锁
国内首家!统信操作系统成功获得商用密码产品认证证书
环球热点!“流浪地球”成功的概率有多高?你肯定想不到
当前视点!脑洞大开的机械键盘 内部竟搭CPU和GPU
天天百事通!阿里云推全国首个跨省域智慧大脑:汇聚江浙沪242项数据资源
全球资讯:不得不防!奥密克戎新变异毒株“双头犬”现身美国:已被世卫监测
【环球热闻】记录--Vue PC前端扫码登录
[概率论与数理统计]笔记:4.4 抽样分布
当前速讯:1.29数论课笔记
最新快讯!40万级乱杀!全新国产奔驰GLC配置曝光:四款车型、两种外观
全球焦点!Gamerant赞《黑神话·悟空》:虚幻5打造《西游记》传说值得期待
天天要闻:这外观似曾相识!荣耀Magic 5 Lite曝光:后置圆环三摄
全球快看:《狂飙》爆火出圈!《孙子兵法》登顶淘宝热搜 发货要等25天
男子2月没摘隐形眼镜:镜片长到眼球上
焦点日报:时区介绍
前沿热点:Matlab导入多个.mat文件进行画图
每日信息:对标三星索尼!SK海力士重组CMOS图像传感器团队
天天微头条丨网友吐槽美国医院3小时拔不出一根鱼刺 急诊那是真不急
全球微资讯!耶路撒冷老城千年护城河道惊现神秘手印 专家:或为工人恶作剧
最新快讯!立减40元:露得清氨基酸洗面奶19.9元到手 男女通用
世界看热讯:5G四足机器人“入职”中国电信核心机房:支持自主巡航 360度旋转夜视
乘法逆元
今日看点:C++11简易线程池实现
002-dockerfile部署java项目
当前观点:springboot~openfeign开启熔断之后MDC为null的理解
焦点播报:WebAPI_DAY1
猛禽之王!摄影爱好者抓拍到金雕展翅抓羊场面:超震撼
全球今亮点!《狂飙》爆火后 《孙子兵法》解析成微信读书飙升榜第一名
天际汽车刹车失灵 故障不断!车主售后找不到人
当前资讯!雷蛇宣布2月2日发布新品:或为毒蝰系列新品
72G《英雄联盟》源代码被盗 拳头游戏拒绝打钱 黑客:100万美元起拍
焦点要闻:关于pacemaker中资源启动的位置条件约束Location Constraints
【天天快播报】Codeforces Round #847 (Div. 3) ABCDE
焦点滚动:win32com操作word API精讲 第八集 Range和Selection的区别
多地现宰客乱象 央视评宰客事件:“一锤子买卖”?
【世界新要闻】明年的苹果iPad Pro将是重头戏!屏幕、后盖全都升级了
50只独立包装 超亚儿童N95医用防护口罩47.9元
全球热文:比亚迪:研发团队目前已覆盖各个电池技术路线
精选!无岳不成村!山东有个公交站叫“满江红” :住着岳飞后代
视焦点讯!《云管理服务白皮书》总结
【网关开发】7.Openresty使用cosocket API 发送http与tcp网络请求
美语发音【总结】
以前票房反超了会画海报恭喜对方:《满江红》却冷嘲热讽
全球今热点:碾压对手!OPPO Find X6工程机亮相:标准版都有潜望长焦
谷歌裁员细节曝光:开源主管被裁 61岁程序员在线求职
10分拉满!IGN发布《流浪地球2》影评:超越国际一流水准
环球新动态:全网音乐免费下载,音乐下载工具,音乐免费下载mp3格式,音乐下载器,小说下载,小说阅读,磁力链接聚合搜索,每日美女壁纸,如何免费下载想听的音乐或小说
天天日报丨【算法训练营day29】LeetCode491. 递增子序列 LeetCode46. 全排列 LeetCode47. 全排列II
关于前端低代码的一些看法
奔驰车主扔钱加油大姐捡钱偷抹泪引热议 当事人回应:网友愤怒素质差到家
动态焦点:蹭热度有风险 电商老店使用流浪地球标识遭索赔15万
当前速讯:海外观众热评《流浪地球2》:中国科幻片惊艳 比全球票房第四《阿凡达2》好看
要买的抓紧了!宝马将于2月起涨价:最高2万元
世界观天下!21岁男子撞车后向27岁“叔叔”道歉 车主果断索赔
【报资讯】骁龙778G还能再战!荣耀50/60系列获MagicOS 7.0升级
每日消息!博主赞特斯拉研发支出巨大:比亚迪、奔驰、理想都比不过
5支39.9元超划算:高露洁牙膏多效护理实惠家庭装套大促
Python工具箱系列(二十三)
天天观速讯丨JavaScript 条件判断与比较运算
环球热推荐:Python 的垃圾回收机制【译】
世界观焦点:Java 如何高亮 Excel 中低于或高于平均值的单元格
每日时讯!一加11同款!一加Ace 2外观首曝:环形镜头设计
全球资讯:春节假期后全国大部地区气温回升:南方最高可达20度 暖如春分
全球播报:生日蛋糕网店使用“流浪地球”标识 遭中影索赔15万
不是云南也不是海南!四川春节游客接待量全国第一
全球观焦点:吉利真会玩儿:汽车挡风玻璃上实现烟花秀
sacai是什么牌子?sacai有中国官网吗?
孑孓的读音是什么?孑孓是什么意思?
手机水货是什么意思?手机水货和行货有什么区别?
木棉花的春天大结局是什么?木棉花的春天全部演员表
绿芜是谁演的?绿芜为什么投河自尽?
电脑出现报警声是怎么回事?电脑出现报警声怎么解决?
松下电饭煲质量怎么样?松下电饭煲怎么调时间?
【环球聚看点】指向立体星(随便起的名)的建立与使用
小米2a手机是什么系统?小米2A手机充电保护怎么打开?
诺基亚210什么时候上市的?诺基亚210手机参数
戴尔的台式机怎么进入bios?戴尔台式机开不了机怎么办?
跑2500公里高速 踩着最后几秒过收费站:女子直呼惊险刺激
今日最新!流浪地球2原来是在青岛流浪 流亭机场戏份最多
全球观察:1:1真机开模!绿联iPhone钢化膜新年大促:2片到手5.22元起
外卖小哥过年3天赚2695元:年三十到初二上班不回家
环球关注:新一代宝马X1或将3月上市:尺寸再加长、堪比大哥X3
flash8.ocx或其附件之一不能正确注册