东莞网站建设咨询上海网站开发团队

张小明 2026/1/12 6:37:03
东莞网站建设咨询,上海网站开发团队,淘宝客网站建设,网站页面seo文章目录 什么是装饰者模式装饰者模式中的角色抽象构件#xff08;Component#xff09;角色具体构件#xff08;Concrete Component#xff09;角色装饰#xff08;Decorator#xff09;角色具体装饰#xff08;Concrete Decorator#xff09;角色测试的时候到了尾声 …文章目录什么是装饰者模式装饰者模式中的角色抽象构件Component角色具体构件Concrete Component角色装饰Decorator角色具体装饰Concrete Decorator角色测试的时候到了尾声什么是装饰者模式网络百科如下装饰模式指的是在不必改变原类文件和使用继承的情况下动态地扩展一个对象的功能。它是通过创建一个包装对象也就是装饰来包裹真实的对象。设计模式和编程语言无关但是二当家的依然用Java语言去实战举例。装饰者模式中的角色抽象构件Component角色给出一个抽象接口以规范准备接收附加责任的对象。具体构件Concrete Component角色定义一个将要接收附加责任的类。装饰Decorator角色持有一个构件Component对象的实例并实现一个与抽象构件接口一致的接口。具体装饰Concrete Decorator角色负责给构件对象添加上附加的责任。抽象构件Component角色用动物接口作为抽象构件Component角色动物会移动和咬。package com.secondgod.decorator; /** * 动物 * * 抽象构件Component角色 * * author 二当家的白帽子 https://le-yi.blog.csdn.net/ */ public interface Animal { /** * 移动 */ void move(); /** * 咬你 */ void bite(); }具体构件Concrete Component角色用会跑会咬的狗狗类作为具体构件Concrete Component角色。package com.secondgod.decorator; /** * 狗 * * 具体构件Concrete Component角色 * * author 二当家的白帽子 https://le-yi.blog.csdn.net/ */ public class Dog implements Animal { Override public void move() { System.out.println(狗子跑起来吧。。。。。); } Override public void bite() { System.out.println(狗子生气了咬你。。。。。); } }装饰Decorator角色专门为动物设计了装备可热插拔牛得很。package com.secondgod.decorator; /** * 动物装备 * * 装饰Decorator角色 * * author 二当家的白帽子 https://le-yi.blog.csdn.net/ */ public abstract class AnimalEquipment implements Animal { private Animal animal; public AnimalEquipment(Animal animal) { this.animal animal; } Override public final void move() { beforeMove(); animal.move(); afterMove(); } Override public final void bite() { beforeBite(); animal.bite(); afterBite(); } /** * 移动前的能力增强 */ protected abstract void beforeMove(); /** * 移动后的能力增强 */ protected abstract void afterMove(); /** * 咬你前的能力增强 */ protected abstract void beforeBite(); /** * 咬你后的能力增强 */ protected abstract void afterBite(); }具体装饰Concrete Decorator角色觉得狗狗跑得有点慢于是设计了一件动物加速装备不要太先进哦。package com.secondgod.decorator; /** * 动物加速装备 * * 具体装饰Concrete Decorator角色 * * author 二当家的白帽子 https://le-yi.blog.csdn.net/ */ public class AnimalAcceleratorEquipment extends AnimalEquipment { public AnimalAcceleratorEquipment(Animal animal) { super(animal); } Override protected void beforeMove() { System.out.println(打开加速引擎。。。。。); } Override protected void afterMove() { System.out.println(关闭加速引擎。。。。。); } Override protected void beforeBite() { } Override protected void afterBite() { } }有的小动物会被大的动物欺负于是为他们设计一款攻击力增强装备来保护自己不要太猛哦。package com.secondgod.decorator; /** * 动物保护装备 * * 具体装饰Concrete Decorator角色 * * author 二当家的白帽子 https://le-yi.blog.csdn.net/ */ public class AnimalProtectionEquipment extends AnimalEquipment{ public AnimalProtectionEquipment(Animal animal) { super(animal); } Override protected void beforeMove() { } Override protected void afterMove() { } Override protected void beforeBite() { System.out.println(安装合金牙套。。。。。); } Override protected void afterBite() { System.out.println(取下合金牙套。。。。。); } }测试的时候到了package com.secondgod.decorator; public class Test { public static void main(String[] args) { System.out.println(一只善良小狗子散步中。。。。。); Animal animal new Dog(); System.out.println(一只凶猛大狗出现前来欺负善良小狗。。。。。); System.out.println(赶紧为善良小狗装上保护装备反击的时候到了。。。。。); animal new AnimalProtectionEquipment(animal); animal.bite(); System.out.println(糟糕了有点过了跑路吧小狗子移动太慢了装上加速装备。。。。。); animal new AnimalAcceleratorEquipment(animal); animal.move(); } }好了安全到家Nice。如果要是用继承的方式要多出来很多类加速不合金的狗子合金不加速的狗子又加速又合金的狗子以后可能还要有加速不合金的猫合金不加速的猫又加速又合金的猫。尾声为了更明确的说明装饰者模式不增加或减少行为而是行为的增强所以装饰角色使用抽象类并且是final方法来举例这样严格限制了具体装饰角色仅决定如何增强行为而不改变行为的多少。事实上装饰角色也可以是接口。装饰者模式太好用了热插拔你不用改变就让你的能力变强了。原文链接https://blog.csdn.net/leyi520/article/details/119964287© 著作权归作者所有,转载或内容合作请联系作者平台声明文章内容如有图片或视频亦包括在内由作者上传并发布文章内容仅代表作者本人观点简书系信息发布平台仅提供信息存储服务喜欢的朋友记得点赞、收藏、关注哦
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

哪家公司做网站比较好WordPress主题开发核心主食

深入理解AUTOSAR中的BSW模块:从硬件驱动到系统服务的全链路解析你有没有遇到过这样的场景?一个项目刚做完,客户突然提出要换一款MCU芯片——原本用的是NXP S32K,现在要换成Infineon AURIX。如果软件和硬件紧耦合,这意味…

张小明 2026/1/11 14:04:38 网站建设

强生公司网站嘉兴网络推广平台

YOLOv8 FFT-based Conv频域卷积可行性研究 在当前深度学习模型不断追求更高精度与实时性的背景下,计算效率已成为制约部署落地的关键瓶颈。尤其是在目标检测这类对延迟敏感的应用中,如自动驾驶感知系统或工业质检流水线,每一毫秒的推理时间都…

张小明 2026/1/10 1:39:59 网站建设

单位网站等级保护必须做吗爱2345网址大全

泉盛UV-K5/K6专业通讯固件升级指南:解锁卫星追踪与频谱分析功能 【免费下载链接】uv-k5-firmware-custom 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware 项目地址: https://gitcode.com/gh_mirrors/uvk5f/uv-k5-firmware-custom 还在为普通对讲机功能…

张小明 2026/1/10 1:39:57 网站建设

制作网站riverwordpress适合环境

还在为复杂的流体力学实验发愁吗?🤔 PIVlab作为一款基于MATLAB的开源粒子图像测速工具,让流体速度场测量变得前所未有的简单。无论你是刚接触流体力学的新手,还是需要进行科研分析的专家,这款软件都能为你提供专业而友…

张小明 2026/1/11 10:38:29 网站建设

做网站新乡微信客户管理系统平台

本文只是记录打包打一部分&#xff0c;但是当前包又以来本项目其它包&#xff0c;然后改动其他包导致打包失败 在父级别的pom文件同级别目录执行 一、pom中的目录 父级别 <modules><module>ruoyi-auth</module><module>ruoyi-gateway</module>&…

张小明 2026/1/11 10:38:27 网站建设