【设计模式】组合模式

ops/2024/11/15 3:56:31/

目录

什么是组合模式

代码实现


什么是组合模式

Java中的组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得客户端对单个对象和组合对象的处理具有一致性,因为它们都遵循相同的接口。

组合模式中,有两种类型的对象:

  1. 叶子节点(Leaf):表示树中的最终对象,它没有子节点。叶子节点通常是最小的组成单元,它们不再包含其他对象。

  2. 组合节点(Composite):表示包含子节点的对象。组合节点通常包含一个或多个子节点,它们实现了与叶子节点相同的接口,因此客户端可以对单个对象和组合对象进行统一的处理。

组合模式的核心思想是将单个对象和组合对象视为具有相同接口的对象。这样,客户端无需关心正在处理的对象是单个对象还是组合对象,而可以将它们一视同仁地处理。

组合模式通常包含以下角色:

  • 组件(Component):定义了组合模式的接口,包含了叶子节点和组合节点的公共操作方法。在Java中通常是一个接口或抽象类。

  • 叶子节点(Leaf):实现了组件接口,表示树中的最终对象,它没有子节点。

  • 组合节点(Composite):实现了组件接口,并包含了一个或多个子节点。组合节点可以添加、删除和获取子节点,并实现了对子节点的统一操作。

组合模式的主要优点包括:

  • 统一接口组合模式使得客户端对单个对象和组合对象的处理具有一致性,因为它们都遵循相同的接口。

  • 灵活性组合模式使得可以轻松地添加、删除和组合对象,而无需更改客户端代码。

  • 可扩展性:由于组合模式中的组件具有相同的接口,因此可以轻松地扩展新的组件类型。

组合模式适用于以下情况:

  • 当需要表示部分-整体的层次结构时,可以使用组合模式

  • 当希望客户端对单个对象和组合对象具有一致性的处理时,可以使用组合模式

总之,组合模式是一种非常有用的设计模式,它使得可以轻松地表示和处理具有层次结构的对象,并使客户端代码更加简洁和灵活。

下面我们使用java代码实现一个组合模式的案例,走你~~~~

代码实现

下面是一个简单的Java代码示例,演示了如何使用组合模式

import java.util.ArrayList;
import java.util.List;// 组件接口
interface Component {void operation();
}// 叶子节点
class Leaf implements Component {private String name;public Leaf(String name) {this.name = name;}@Overridepublic void operation() {System.out.println("Leaf " + name + ": operation");}
}// 组合节点
class Composite implements Component {private List<Component> children = new ArrayList<>();public void add(Component component) {children.add(component);}public void remove(Component component) {children.remove(component);}@Overridepublic void operation() {System.out.println("Composite: operation");for (Component component : children) {component.operation();}}
}// 客户端
public class CompositePatternExample {public static void main(String[] args) {// 创建叶子节点Leaf leaf1 = new Leaf("A");Leaf leaf2 = new Leaf("B");Leaf leaf3 = new Leaf("C");// 创建组合节点Composite composite1 = new Composite();Composite composite2 = new Composite();// 将叶子节点添加到组合节点中composite1.add(leaf1);composite1.add(leaf2);composite2.add(leaf3);// 将组合节点添加到另一个组合节点中Composite composite = new Composite();composite.add(composite1);composite.add(composite2);// 客户端操作组合节点composite.operation();}
}

        在这个示例中,Component是组件接口,定义了组合模式的操作方法。Leaf是叶子节点类,实现了Component接口,并表示树中的最终对象。Composite是组合节点类,实现了Component接口,并包含了一个或多个子节点。

        在客户端代码中,我们创建了几个叶子节点和组合节点,并将它们组合成一个树形结构。然后,我们调用根节点的operation方法,从而触发整个树形结构的操作。通过组合模式,我们可以将单个对象和组合对象一视同仁地进行处理。

        非常的实用,喜欢的小伙伴可以动动你们发财的小手,给博主一个小小的点赞或者关注,就是对博主最大的鼓励,爱你们哦~~


http://www.ppmy.cn/ops/6142.html

相关文章

怎样把pandas.core.frame.DataFrame数据写入excel文件?

要将pandas的DataFrame数据写入Excel文件&#xff0c;可以使用pandas提供的to_excel方法。 首先&#xff0c;安装pandas库&#xff08;如果尚未安装&#xff09;&#xff1a; pip install pandas然后&#xff0c;导入pandas库&#xff1a; import pandas as pd接下来&#x…

20.Unity飞机大战游戏

1任务&#xff1a;使背景图动起来 2任务&#xff1a;飞机换帧动画 3任务&#xff1a;让飞机发射子弹 4任务&#xff1a;敌机出现 5任务&#xff1a;控制飞机 6任务&#xff1a;游戏碰撞逻辑 7任务&#xff1a;另外两种类型的敌机 8任务&#xff1a;拾取奖励物品换枪 9…

Android自定义类-写字板

目录 1. 属性文件 res/values/attrs.xml 2. 自定义控件类文件 MyClipbroad.class 3. XML布局文件中的使用 4. Java文件中的使用 该写字板可设置画笔颜色、画笔宽度、画布背景&#xff0c;具有导出图像、清空画布功能&#xff0c;可与OnTouchListener配合达到触摸绘画的效果…

全国产化无风扇嵌入式车载电脑农耕车辆/钢厂天车行业应用

农耕车辆行业应用 背景介绍 当前农耕车车载电脑主要的功能&#xff0c;是要实现农耕车的精确的定位和导航&#xff0c;更加先进的系统则要实现农耕车自动驾驶&#xff0c;与农耕车上相关传感器的通讯(例如耕土深度的传感器, 油量存量传感器…)来实现更多的自动化、信息化的功能…

JAVA程序设计-对象设计

无论是根据某马还是某谷的适配教程做项目时候,发现了大部分都是重复的crud,大部分只要做好笔记复习即可,但是却往往忘记了编码设计,所以这里开始复习编码设计,对象设计中,长期使用Mp的那一套导致就是Service Mapper,一套梭哈完了,这样很容易忘记基本功夫 POJO&#xff1a; 简单…

docker方式 部署jenkins服务,实现持续集成(CI/CD)功能

一、背景&#xff1a; 因公司需求&#xff0c;需要部署一套jenkins自动化部署服务&#xff0c;并且是通过docker容器的方式部署的。 二、jenkins简介&#xff1a; 什么是Jenkins &#xff1f; Jenkins是一个开源软件&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用…

分类算法——朴素贝叶斯(四)

概率基础 1概率定义 概率定义为一件事情发生的可能性 扔出一个硬币&#xff0c;结果头像朝上 P(X)&#xff1a;取值在[0&#xff0c;1] 2女神是否喜欢计算案例 在讲这两个概率之前我们通过一个例子&#xff0c;来计算一些结果&#xff1a; 问题如下&#xff1a; 1、女神喜欢…

数据结构 第五章 串(模式匹配算法)

&#x1f680; 【考纲要求】字符串模式匹配 一、暴力模式匹配算法 问题描述&#xff1a; 给定一个主串Text "abcdabcd"&#xff0c;再给定一个串Parten "abg"。匹配算法要实现再主串Text是否含有子串Parten&#xff0c;若在主串Text中能找到子串Parten&…