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

java组合设计模式Composite Pattern

组合设计模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。

// Component - 图形接口
interface Graphic {void draw();
}// Leaf - 叶子节点:圆形
class Circle implements Graphic {@Overridepublic void draw() {System.out.println("Drawing a Circle");}
}// Leaf - 叶子节点:正方形
class Square implements Graphic {@Overridepublic void draw() {System.out.println("Drawing a Square");}
}// Composite - 组合节点:图形组合
class CompositeGraphic implements Graphic {private List<Graphic> childGraphics = new ArrayList<>();@Overridepublic void draw() {for (Graphic graphic : childGraphics) {graphic.draw();}}// 添加子图形public void add(Graphic graphic) {childGraphics.add(graphic);}// 移除子图形public void remove(Graphic graphic) {childGraphics.remove(graphic);}
}// 客户端代码
public class CompositePatternDemo {public static void main(String[] args) {// 创建叶子节点Graphic circle = new Circle();Graphic square = new Square();// 创建组合节点CompositeGraphic composite = new CompositeGraphic();CompositeGraphic composite2 = new CompositeGraphic();// 构建组合树结构composite.add(circle);composite.add(square);composite2.add(composite);composite2.add(new Circle());// 绘制组合图形composite2.draw();}
}

在这个示例中:

  1. Graphic接口是所有图形组件的共同接口,定义了一个draw方法。
  2. CircleSquare类是叶子节点,实现了Graphic接口的draw方法。
  3. CompositeGraphic类是组合节点,包含了一组Graphic对象,并实现了Graphic接口的draw方法。它能够添加和移除子节点。
  4. CompositePatternDemo类是客户端代码,展示了如何创建和使用组合图形结构。

通过这种方式,客户端代码可以一致地处理单个对象和组合对象。无论是单个圆形、正方形,还是由这些图形组合而成的复杂结构,客户端都可以通过相同的接口进行操作。

相关文章:

  • 【话题】你眼中的IT行业现状与未来趋势
  • linux系统——ps命令的两种参数模式
  • Langchain:数据连接封装、缓存封装和LCEL学习和探索
  • 【无标题】为什么在运行 F-Tile 三速以太网FPGA IP 设计示例时会看到意外的吞吐量结果?
  • Unity LayerMask避坑笔记
  • 基于transformers框架实践Bert系列5-阅读理解(文本摘要)
  • Redis常见数据类型(3)-String, Hash
  • 学习平台|基于Springboot+vue的学习平台系统的设计与实现(源码+数据库+文档)
  • c语言之运算符练习题
  • Spring Boot集成testcontainers快速入门Demo
  • 基于地理坐标的高阶几何编辑工具算法(5)——合并相交面
  • Python操作MySQL实战
  • 椋鸟C++笔记#3:类的默认成员函数
  • 【html】网页布局模板01---简谱风
  • Java_IO流学习
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Android交互
  • gf框架之分页模块(五) - 自定义分页
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java超时控制的实现
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js作用域和this的理解
  • laravel 用artisan创建自己的模板
  • Lucene解析 - 基本概念
  • Python打包系统简单入门
  • QQ浏览器x5内核的兼容性问题
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SQLServer插入数据
  • vue 个人积累(使用工具,组件)
  • Vue 动态创建 component
  • vue:响应原理
  • 电商搜索引擎的架构设计和性能优化
  • 基于Android乐音识别(2)
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 免费小说阅读小程序
  • 面试遇到的一些题
  • 巧用 TypeScript (一)
  • 微信小程序填坑清单
  • 我是如何设计 Upload 上传组件的
  • 新手搭建网站的主要流程
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #vue3 实现前端下载excel文件模板功能
  • $jQuery 重写Alert样式方法
  • (2)nginx 安装、启停
  • (3) cmake编译多个cpp文件
  • (二) 初入MySQL 【数据库管理】
  • (分布式缓存)Redis分片集群
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (转)3D模板阴影原理
  • (转)Sublime Text3配置Lua运行环境
  • (转)视频码率,帧率和分辨率的联系与区别