当前位置: 首页 > news >正文

设计模式——组合模式(Composite Pattern)+ Spring相关源码

文章目录

  • 一、组合模式定义
  • 二、例子
    • 2.1 菜鸟教程例子
      • 2.1.1 创建 Employee 类,该类带有 Employee 对象的列表。
      • 2.1.2 使用 Employee 类来创建和打印员工的层次结构。
    • 2.2 JDK源码——java.awt.Container
    • 2.3 Spring源码——CompositeCacheManager
  • 三、其他设计模式

一、组合模式定义

类型: 结构型模式
介绍: 一种树形结构。它又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。
目的: 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

二、例子

2.1 菜鸟教程例子

2.1.1 创建 Employee 类,该类带有 Employee 对象的列表。

public class Employee {private String name;private String dept;private int salary;private List<Employee> subordinates;//构造函数public Employee(String name,String dept, int sal) {this.name = name;this.dept = dept;this.salary = sal;subordinates = new ArrayList<Employee>();}public void add(Employee e) {subordinates.add(e);}public void remove(Employee e) {subordinates.remove(e);}public List<Employee> getSubordinates(){return subordinates;}public String toString(){return ("Employee :[ Name : "+ name +", dept : "+ dept + ", salary :"+ salary+" ]");}   
}

2.1.2 使用 Employee 类来创建和打印员工的层次结构。

public class CompositePatternDemo {public static void main(String[] args) {Employee CEO = new Employee("John","CEO", 30000);Employee headSales = new Employee("Robert","Head Sales", 20000);Employee headMarketing = new Employee("Michel","Head Marketing", 20000);Employee clerk1 = new Employee("Laura","Marketing", 10000);Employee clerk2 = new Employee("Bob","Marketing", 10000);Employee salesExecutive1 = new Employee("Richard","Sales", 10000);Employee salesExecutive2 = new Employee("Rob","Sales", 10000);CEO.add(headSales);CEO.add(headMarketing);headSales.add(salesExecutive1);headSales.add(salesExecutive2);headMarketing.add(clerk1);headMarketing.add(clerk2);//打印该组织的所有员工System.out.println(CEO); for (Employee headEmployee : CEO.getSubordinates()) {System.out.println(headEmployee);for (Employee employee : headEmployee.getSubordinates()) {System.out.println(employee);}}        }
}

2.2 JDK源码——java.awt.Container

public class Container extends Component {private java.util.List<Component> component = new ArrayList<>();public Component getComponent(int n) {try {return component.get(n);} catch (IndexOutOfBoundsException z) {throw new ArrayIndexOutOfBoundsException("No such child: " + n);}}public Component add(Component comp) {addImpl(comp, null, -1);return comp;}}

2.3 Spring源码——CompositeCacheManager

public class CompositeCacheManager implements CacheManager, InitializingBean {private final List<CacheManager> cacheManagers = new ArrayList();@Nullablepublic Cache getCache(String name) {Iterator var2 = this.cacheManagers.iterator();Cache cache;do {if (!var2.hasNext()) {return null;}CacheManager cacheManager = (CacheManager)var2.next();cache = cacheManager.getCache(name);} while(cache == null);return cache;}
}

三、其他设计模式

创建型模式
结构型模式

  • 1、设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码

行为型模式

  • 1、设计模式——访问者模式(Visitor Pattern)+ Spring相关源码
  • 2、设计模式——中介者模式(Mediator Pattern)+ JDK相关源码
  • 3、设计模式——策略模式(Strategy Pattern)+ Spring相关源码
  • 4、设计模式——状态模式(State Pattern)
  • 5、设计模式——命令模式(Command Pattern)+ Spring相关源码
  • 6、设计模式——观察者模式(Observer Pattern)+ Spring相关源码
  • 7、设计模式——备忘录模式(Memento Pattern)
  • 8、设计模式——模板方法模式(Template Pattern)+ Spring相关源码
  • 9、设计模式——迭代器模式(Iterator Pattern)+ Spring相关源码
  • 10、设计模式——责任链模式(Chain of Responsibility Pattern)+ Spring相关源码
  • 11、设计模式——解释器模式(Interpreter Pattern)+ Spring相关源码

相关文章:

设计模式——组合模式(Composite Pattern)+ Spring相关源码

文章目录 一、组合模式定义二、例子2.1 菜鸟教程例子2.1.1 创建 Employee 类&#xff0c;该类带有 Employee 对象的列表。2.1.2 使用 Employee 类来创建和打印员工的层次结构。 2.2 JDK源码——java.awt.Container2.3 Spring源码——CompositeCacheManager 三、其他设计模式 一…...

大语言模型-LLM简介

大语言模型如此火爆&#xff0c;查了些资料整理一下&#xff0c;做个初步的了解。 语言模型的发展从开始的统计方法到使用神经网络&#xff0c;再到现在通过使用Transformer架构的模型训练大量数据&#xff0c;理解文本规则和模式&#xff0c;同时随着训练数据和模型的扩大&…...

创建多层级行索引,创建多层级行索引的DataFrameMultiIndex.from_product()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 创建多层级行索引, 创建多层级行索引的DataFrame MultiIndex.from_product() [太阳]选择题 使用pd.MultiIndex.from_product()&#xff0c;下列输出正确的是&#xff1a; import pandas as pd…...

用尽可能简单易懂的代码做个时间轴(时间线)

用尽可能简单的代码&#xff0c;做个时间线或者时间轴展示功能&#xff0c;效果如图&#xff1a; 特点&#xff1a;纯DIVCSS构建&#xff0c;需要展示到什么进度&#xff0c;直接加active属性就行了。 还贴心给配了个setProgress(step)函数&#xff0c;功能太简单&#xff0c;…...

STM32笔记—定时器

目录 一、TIM简介 二、基本定时器&#xff08;TIM6和TIM7&#xff09; 1. TIM6和TIM7简介 2. TIM6和TIM7的主要特性 3. TIM6和TIM7的功能 3.1 时基单元 3.2 计数模式 3.3 时钟源 三、通用定时器 1. TIMx(2、3、4、5)简介 2. TIMx主要功能 3. 时钟选择 4. 影子寄存…...

【力扣:1504】统计全1子矩阵

统计全1子矩阵个数 思路1&#xff1a;首先考虑深度优先模拟&#xff0c;从【0&#xff0c;0】出发向下、右扩展&#xff0c;符合条件res&#xff0c;最后输出res&#xff0c;比较直观&#xff0c;但重复进行了大量节点遍历操作&#xff0c;时间复杂度较高&#xff0c;数据量大时…...

排序算法之-选择

算法原理 在未排序的数列中找出最大&#xff08;或最小&#xff09;的元素&#xff0c;然后将其存入到已排序的数列起始位置&#xff0c;紧接着在剩余的未排序数列中继续查找最大&#xff08;或最小&#xff09;的元素&#xff0c;并将其放入到已排序的数列末尾&#xff0c;依…...

机器学习模板代码(期末考试复习)自用存档

机器学习复习代码 利用sklearn实现knn import numpy as np import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCVdef model_selection(x_train, y_train):## 第一个是网格搜索## p是选择查找方式:1是欧…...

使用sizeof()和strlen()去计算【数组】和【指针】的大小

文章目录 一、知识回顾1、回顾sizeof()、strlen的作用&#xff1a;2、数组和指针3、数组名 二、sizeof()、strlen()的使用区别1、注意区别&#xff1a;2、一维数组与一级指针3、二维数组与二级指针 三、总结回顾 一、知识回顾 1、回顾sizeof()、strlen的作用&#xff1a; siz…...

viple进阶4:打印空心三角形

题目&#xff1a;根据用户输入的行数n打印空心三角形&#xff0c;下图分别为n3、n4、n5和n10的效果图 第一步&#xff1a;观察效果图 输入的行数为3&#xff0c;打印结果就有3行&#xff1b;输入的行数为4&#xff0c;则打印结果就有4行&#xff1b;以此类推&#xff0c;输入的…...

Oauth2.0的内容

OAuth 2.0是一个授权协议&#xff0c;用于允许第三方应用程序访问用户在另一个应用程序上存储的受保护资源&#xff0c;而不需要将用户名或密码公开给第三方应用程序。 OAuth2.0基于客户端-服务器模型&#xff0c;通常需要三个主体&#xff1a;客户端、资源所有者和授权服务器…...

npm 下载包失败解决方案

1.【问题描述】使用 npm 下载vue项目依赖包时失败&#xff0c;版本不一致。 【解决方法】使用 npm install --force npm install --force 是一个命令行指令&#xff0c;用于在 Node.js 环境中使用 npm&#xff08;Node Package Manager&#xff09;安装包或模块。–force 参数表…...

C语言---插入排序、希尔排序、冒泡排序、选择排序、快速排序简单介绍

文章目录 插入排序希尔排序冒泡排序选择排序快速排序 本文主要介绍用C语言实现的一些排序方法&#xff0c;有插入排序、希尔排序、冒泡排序、选择排序和快速排序&#xff0c;文章中给出的例子都是按照升序排列的。 插入排序 若数组只有一个元素&#xff0c;自然不用排序&#…...

撸视频号收益这个副业靠谱吗?

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 昨天有个人问我说做视频号能月入过万吗? 我的回复是&#xff1a;99%的人不能。 但为什么会经常有人这么问呢&#xff0c;松松思考了一下&#xff0c;原因是最近很多人在晒视频号撸收益的项目&am…...

2、数组、Map+HashMap、Set+Hashset、Char和Character类、String类和Char类、Math类

数组 \\一个普通的长度为1的整数数组 Integer[] arr new Integer[1];\\一个普通长度为1的同时元素初始化为1的整数数组。 Integer[] arr new Integer[]{1};\\一个长度为0的空数组 Integer[] arr new Integer[0];Map 常见方法 void clear( ) 从此映射中移除所有映射关系&#…...

ESP8266 WiFi模块快速入门指南

ESP8266是一种低成本、小巧而功能强大的WiFi模块&#xff0c;非常适合于物联网和嵌入式系统应用。本指南将为您提供关于ESP8266 WiFi模块的快速入门步骤和基本知识。 第一步&#xff1a;硬件准备 首先&#xff0c;您需要将ESP8266 WiFi模块与您的开发板连接。通常情况下&#…...

微信小程序将后端返回的图片文件流解析显示到页面

说明 由于请求接口后端返回的图片格式不是一个完整的url,也不是其他直接能显示的图片格式&#xff0c;是一张图片 后端根据模板与二维码生成图片,返回二进制数据 返回为文件流的格式,用wx.request请求的时候&#xff0c;就自动解码成为了下面这样的数据数据格式,这样的数据没…...

网络基础(1)

目录&#xff1a; 1.了解局域网&#xff08;LAN&#xff09;和广域网&#xff08;WAN&#xff09; 2.认识“协议” 3.浅谈OSI七层模型 4.网络传输的基本流程 5.路由器这个设备 ---------------------------------------------------------------------------------------…...

flink的AggregateFunction,merge方法作用范围

背景 AggregateFunction接口是我们经常用的窗口聚合函数&#xff0c;其中有一个merge方法&#xff0c;我们一般情况下也是实现了的&#xff0c;但是你知道吗&#xff0c;其实这个方法只有在你使用会话窗口需要进行窗口合并的时候才需要实现 AggregateFunction.merge方法调用时…...

Day25力扣打卡

打卡记录 寻找旋转排序数组中的最小值&#xff08;二分&#xff09; 链接 由于是旋转排序数组&#xff0c;所以整个数组有两部分是递增的&#xff0c;选取右侧最后元素&#xff0c;即可将整个数组分为大于该元素和小于该元素&#xff0c;碰头地段即为最小值。 class Solutio…...

终极Tiled插件开发指南:30分钟打造专属游戏地图导出器

终极Tiled插件开发指南&#xff1a;30分钟打造专属游戏地图导出器 【免费下载链接】tiled Flexible level editor 项目地址: https://gitcode.com/gh_mirrors/ti/tiled 还在为游戏引擎不兼容Tiled地图格式而烦恼吗&#xff1f;还在手动转换地图数据浪费宝贵开发时间吗&a…...

ubuntu 增加实时性的办法

Ubuntu 实时性优化方案&#xff0c;目标是把延迟抖动压到 <50us、甚至 < 30us&#xff0c;和你现在的 fast_shm 数据匹配。 一、内核选择&#xff08;最关键&#xff09; 1&#xff09;低延迟内核&#xff08;先试&#xff0c;简单&#xff09; bash 运行 sudo apt u…...

别再只盯着西门子三菱了!盘点那些好用不贵的国产HMI触摸屏品牌(附选型指南)

国产HMI触摸屏品牌深度评测与选型指南&#xff1a;如何用30%预算实现80%进口品牌功能 在工业自动化领域&#xff0c;人机界面(HMI)作为连接操作人员与设备的"神经中枢"&#xff0c;其重要性不言而喻。过去十年间&#xff0c;国内HMI市场格局已发生翻天覆地的变化——…...

CSS如何实现水平垂直居中效果_利用flex布局的justify-content与align-items

...

告别单打独斗:用Code-serverManager在Ubuntu上搭建团队共享的在线VSCode(附详细配置与避坑)

告别单打独斗&#xff1a;用Code-serverManager在Ubuntu上搭建团队共享的在线VSCode&#xff08;附详细配置与避坑&#xff09; 在远程协作成为主流的今天&#xff0c;开发团队常常面临环境配置不统一、代码审查效率低下等问题。想象一下&#xff0c;当新成员加入项目时&#x…...

ESP32接HC-SR04超声波模块,5V Echo信号怎么安全处理?一个电阻分压电路搞定

ESP32与HC-SR04超声波模块的5V信号安全处理实战指南 引言 第一次使用ESP32连接HC-SR04超声波模块时&#xff0c;我犯了一个几乎所有初学者都会犯的错误——直接将Echo引脚接到ESP32的GPIO上。结果&#xff1f;一块价值不菲的开发板就这样报废了。这个惨痛教训让我深刻认识到5V信…...

STM32CubeMX实战:DHT11温湿度数据采集与串口打印

1. DHT11温湿度传感器基础认知 第一次接触DHT11这个蓝色小模块时&#xff0c;我完全没想到它会在后来的智能家居项目中扮演如此重要的角色。这个比硬币大不了多少的传感器&#xff0c;内部却藏着测量温湿度的精妙机制。DHT11采用电阻式感温元件和湿敏电容的组合设计&#xff0c…...

实测10款降AI工具|去AI痕迹高效方法,附免费降AI技巧

前言&#xff1a;AI率动辄90%&#xff1f;降AI我踩过的坑全给你说透 各位正在赶论文的小伙伴看过来&#xff01;最近被问得最多的问题&#xff0c;就是论文的AIGC检测率太高怎么办。毕竟现在大家写文献综述、整理实验背景&#xff0c;多多少少都会用AI工具搭个框架&#xff0c…...

ncmdumpGUI:网易云音乐NCM文件解密转换的图形界面解决方案

ncmdumpGUI&#xff1a;网易云音乐NCM文件解密转换的图形界面解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲…...

专利价值量化分析:基于机器学习实现专利权利要求广度评估,提升知识产权管理效率70%

专利价值量化分析&#xff1a;基于机器学习实现专利权利要求广度评估&#xff0c;提升知识产权管理效率70% 【免费下载链接】patents-public-data Patent analysis using the Google Patents Public Datasets on BigQuery 项目地址: https://gitcode.com/gh_mirrors/pa/paten…...