设计模式—装饰模式

与其明天开始,不如现在行动!

文章目录

  • 装饰模式—穿衣服
  • 💎总结


装饰模式—穿衣服

装饰模式(Decorator)可以动态的给对象添加一些额外的职责。

在这里插入图片描述

Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,从外类来扩展Component类的功能,但是对于Component来说,是不需要知道Decorator的存在。

现在有一个装扮游戏,需要你给主角穿衣服,最后只需要在控制台打印出来穿的什么衣服就行。利用装饰模式的思想,有一个接口可以给对象动态的添加职责;有一个具体的要装饰的人,还要有一个装饰的抽象类,所有具体的装饰类都继承这个装饰抽象类。

Component对象接口:

public interface ICharacter {void show();
}

具体的对象:

public class Person implements ICharacter{private String name;public Person(String name) {this.name = name;}@Overridepublic void show() {System.out.println("装扮的" + name);}
}

装饰抽象类:

public abstract class Finery implements ICharacter{protected ICharacter component;public void decorate(ICharacter component) {this.component = component;}@Overridepublic void show() {if (component != null) {this.component.show();}}
}

具体的装饰类:

运动裤

public class SweatPants extends Finery{@Overridepublic void show() {System.out.print("运动裤");super.show();}
}

T恤衫:

public class TShirt extends Finery{@Overridepublic void show() {System.out.print("T恤衫");super.show();}
}

西装:

public class Suit extends Finery{@Overridepublic void show() {System.out.print("西装");super.show();}
}

皮鞋:

public class LeatherShoes extends Finery{@Overridepublic void show() {System.out.print("皮鞋");super.show();}
}

程序的UML图:

穿衣服的程序UML图

总结:

装饰模式不需要向旧的类中添加新的装饰代码,它提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,让这个类包装它所需要的装饰对象。总而言之,装饰功能就是将类中的装饰功能从类中移除,可以简化原有的类。

装饰模式有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。

装饰模式理解


💎总结

本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter ios 使用ListView 。滚动时 AppBar 改变颜色问题

在Ios 中 列表滚动条向下滚动一段距离后 会导致 AppBar 颜色改变 可以给 AppBar 或者 AppBarTheme。 scrolledUnderElevation: 0.0 属性 全局: MaterialApp(theme: ThemeData(appBarTheme: AppBarTheme(scrolledUnderElevation: 0.0)) ) 局部: App…

代码随想录算法训练营第二十天 |654.最大二叉树 、 617.合并二叉树 、700.二叉搜索树中的搜索 、 98.验证二叉搜索树

今天学习内容:654.最大二叉树 、 617.合并二叉树 、700.二叉搜索树中的搜索 、 98.验证二叉搜索树 讲解:代码随想录 654.最大二叉树 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 最大二叉树的构建过程如上,图…

STM32----HAL库函数

1.STM32系统框架 1.1 Cortex-M内核&芯片 1.2 F1系统框架 4个主动单元4个被动单元 AHB:高级高性能总线 APH:高级外围总线 其中 1 为 主动单元 , 2为被动单元 总线时钟频率&…

低代码开发平台的优势及应用场景分析

文章目录 低代码是什么?低代码起源低代码分类低代码的能力低代码的需求市场需要专业开发者需要数字化转型需要 低代码的趋势如何快速入门低代码开发低代码应用领域 低代码是什么? 低代码(Low-code)是著名研究机构Forrester于2014…

充电器如何测试?有哪些测试参数?用电源模块自动化测试系统测试需要哪些步骤?

充电器测试参数 1. 输入、输出电压测试 通过万用表或者其它精密测试设备测量充电器的输入、输出电压测试,检测输入、输出电压是否在规定范围内,以免造成设备损坏。 2. 输入、输出电流测试 测试充电器的输入、输出电流,确保其符合设计要求&…

【AIGC重塑教育】AI大模型驱动的教育变革与实践

文章目录 🍔现状🛸解决方法✨为什么要使用ai🎆彩蛋 🍔现状 AI正迅猛地改变着我们的生活。根据高盛发布的一份报告,AI有可能取代3亿个全职工作岗位,影响全球18%的工作岗位。在欧美,或许四分之一…

配电室综合监测系统

配电室综合监测系统是一种集成了自动化、智能化等技术手段的电力监控系统。它通过对配电室内的电力设备进行实时监控、数据分析和处理,能够提高电力设备的安全性和效率,及时发现并解决电力故障和潜在问题,保证电力系统的稳定运行。 该系统通常…

秒搜全网闲鱼商品!一键实现商品详情关键词搜索的酷炫电商API接口!

在如今的电商时代,商品搜索已经成为一个非常重要的功能。当用户在电商平台上浏览商品时,如果能够快速而准确地搜索到自己感兴趣的商品,无疑会提升用户的购物体验,进而增加平台的销售额。联讯数据将介绍一款名为“闲鱼商品秒搜API”…

10天玩转Python第10天:python unittest框架 全面详解与代码示例

目录 1.unittest 组成2.断言3.参数化4.测试报告 今日内容 unittest 框架的组成 TestLoaderFixture 断言跳过(某些用例由于某些原因不想执行)参数化测试报告 ​​​​ 1.unittest 组成 TestLoader (测试加载) TestLoader (测试加载), 作用和 TestSuite 的作用是一样的, 对 T…

亚信安慧AntDB数据库助力智慧高速建设

随着新型智慧交通业务的迅速发展,各地高速公路在管控、收费和监测方面的数据管理变得至关重要。智慧公路信息化建设已成为高速公路建设的核心。AntDB数据库在某省级客户中发挥关键作用,帮助构建协同共享、高效的统一智慧管理平台,为高速公路的…

内网BUG管理系统本地部署并结合内网穿透实现异地远程访问

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

app上架-.您的应用在首次打开或运行中,未见使用权限对应的相关功能或服务时,提前向用户弹窗申请开启【已安装应用列表】权限,不符合华为应用市场审核标准。

上架提示 您的应用在首次打开或运行中,未见使用权限对应的相关功能或服务时,提前向用户弹窗申请开启【已安装应用列表】权限,不符合华为应用市场审核标准。 测试步骤:首次打开APP,在首页页面,非服务所必须…

实验4.1 静态路由的配置

实验4.1 静态路由的配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.设置交换机和路由器的基本配置。2.使用display ip interface brief命令查看接口配置信息。3.配置静态路由,实现全网互通。 六、任务验收七、任务小结 一、任务描述 某公司刚…

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…

钡铼无线R10A工业级路由器在工业机器人领域的创新应用

随着工业机器人的普及&#xff0c;对于高可靠性和高稳定性的网络接入设备的需求也越来越大。传统的有线网络虽然稳定&#xff0c;但在现场布置和维护上面临很多困难&#xff0c;而无线网络虽然方便&#xff0c;但受到信号干扰和传输距离限制等问题的影响。如何解决这些问题&…

解决 Hbuilder打包 Apk pad 无法横屏 以及 H5 直接打包 成Apk

解决 Hbuilder打包 Apk pad 无法横屏 前言云打包配置 前言 利用VUE 写了一套H5 想着 做一个APP壳 然后把 H5 直接嵌进去 客户要求 在pad 端 能够操作 然后页面风格 也需要pad 横屏展示 云打包 配置 下面是manifest.json 配置文件 {"platforms": ["iPad"…

优优嗨聚集团美团代运对外卖市场的影响与作用

随着互联网的普及和消费者对便捷生活需求的增加&#xff0c;外卖市场逐渐成为人们日常生活中不可或缺的一部分。在这个竞争激烈的市场中&#xff0c;美团代运作为外卖配送领域的佼佼者&#xff0c;对外卖市场产生了深远的影响。本文将探讨美团代运对外卖市场的作用&#xff0c;…

Spring Cloud Alibaba核心技术宝典,分布式系统中间件实战案例(百度云下载)

前言 《Spring Cloud Alibaba学习笔记》其实是阿里的微服务解决方案&#xff0c;是阿里巴巴结合自身微服务实践,开源的微服务全家桶&#xff0c;在Spring Cloud项目中孵化成为Spring Cloud的子项目。第一代的Spring Cloud标准中很多组件已经停更,如&#xff1a;Eureak,zuul等。…

HBase shell 基础实操

目录 1 查看 HBase 状态 2 查看帮助命令 3 查看版本号 4 命名空间操作 5 创建表 6 列出所有的表 7 获取表描述 8 删除列族 9 其他 DDL 操作 1 查看 HBase 状态 进入 HBase 客户端命令行&#xff1a; (base) [roothadoop01 ~]# hbase shell hbase:001:0> statu…

工业物联网为什么更倾向使用蓝牙技术进行对接?

工业物联网更倾向使用蓝牙技术进行对接的原因主要有以下几点&#xff1a; 1、抗干扰能力强&#xff1a;蓝牙技术使用2.4GHz ISM频段&#xff0c;尽管这个频段繁忙&#xff0c;但蓝牙仍然具有确保消息成功到达目的地的巧妙方法。自适应跳频有助于确保数据成功通过噪声&#xff0…