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

结构型模式之组合模式

一、概述

1、定义:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构

2、组合模式让客户端统一对待单个对象和组合对象

3、组合模式又称为部分-整体模式

4、将对象组织到树形结构中,可以用来描述整体与部分的关系

二、组合模式的结构

组合模式包含以下3个角色:

1、Component(抽象构件)

2、Leaf(叶子构件)

3、Composite(容器对象)

三、UML图

四、模式优点

1、可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,让客户端忽略了层次的差异,方便对整个层次结构进行控制

2、增加新的容器构件和叶子构件都很方便,符合开闭原则

3、为树形结构的面向对象实现提供了一种灵活的解决方案

五、模式缺点

1、在增加新构件时,很难对容器中的构件类型进行限制

六、示例代码

#include <iostream>
using namespace std;
#include <memory>
#include <vector>//组件部件
class Component
{
public:virtual void operation() const = 0;virtual ~Component() = default;
};//叶子节点
class Leaf : public Component
{
public:void operation() const override{cout << "Leaf operation" << endl;}
};//组合节点
class Composite : public Component
{
public:void add(const std::shared_ptr<Component>& component){m_childen.push_back(component);}void operation() const override{cout << "Composite operation" << endl;for (const auto& child : m_childen)child->operation();}
private:vector<std::shared_ptr<Component>> m_childen;
};int main()
{//创建叶子节点auto leaf1 = std::make_shared<Leaf>();auto leaf2 = std::make_shared<Leaf>();//创建组合节点auto composite = std::make_shared<Composite>();composite->add(leaf1);composite->add(leaf2);//执行操作composite->operation();return 0;
}


http://www.mrgr.cn/news/5939.html

相关文章:

  • YOLOv10:实时端到端目标检测
  • IDM下载器怎么提速 IDM下载速度慢解决办法 idm下载器设置怎么下载最快
  • git打包某个分支的特定提交
  • 【SpringBoot】开发常见注解
  • RabbitMQ中如何通过死信交换机实现延时队列
  • MFC使用双缓冲实现绘制字符串防闪烁
  • 书生大模型实战营第三期基础岛第二课——8G 显存玩转书生大模型 Demo
  • 8.21面试复盘
  • 彻底解决win7系统文件夹选项高级设置是空白
  • 在Ubuntu 部署 Grafana且监控MySQL数据
  • Spring中策略模式模拟优惠券使用,解耦代码!
  • 监听MySQL binlog
  • 酷家乐 同盾滑块分析
  • ISO7841标准数字隔离器在现代电子系统中的作用
  • 2024最新50道NLP和人工智能领域面试题+答案(中文+英文双版本)
  • linux基础命令(超级详细)
  • oracle的dataguard physical standby转 snapshot standby操作文档
  • react 的学习随记
  • 如何通过变更让 PostgreSQL 翻车
  • 【STM32单片机_(HAL库)】3-2-3【中断EXTI】【电动车报警器项目】433M无线收发模块实验