关于组合模式我所知道的

简介: 关于组合模式我所知道的

image.png


关键词:结构型 CompoundPattern 树形结构


解决什么问题


组合模式,将一组对象组织成树形结构。

将单个对象和组合对象都看做树中的节点,以统一处理逻辑。

并且它利用树形结构的特点,递归地处理每个子树,依次简化代码实现。

使用组合模式的前提在于,你的业务场景必须能够表示成树形结构。


应用场景


主要是用来处理树形结构数据

特别是我们在开发期间不确定这棵树到底存在多少层次的时候。

类与类之间不是父子关系,而是聚合关系。就像 ToggleFlyOut 之间的关系一样。

function Toggle({ open, toggle }) {
  return (
    <div className="flyout-btn" onClick={() => toggle(!open)}>
      <Icon />
    </div>
  );
}
function List({ children, open }) {
  return open && <ul className="flyout-list">{children}</ul>;
}
function Item({ children }) {
  return <li className="flyout-item">{children}</li>;
}
function FlyOut(props) {
  const [open, toggle] = useState(false);
  return (
    <div className={`flyout`}>
      {React.Children.map(props.children, (child) =>
        React.cloneElement(child, { open, toggle })
      )}
    </div>
  );
}
FlyOut.Toggle = Toggle;
FlyOut.List = List;
FlyOut.Item = Item;


具体实践

react 实现


image.png


原生实现


image.png


参考资料

refactoringguru 组合模式

patterns compound-pattern


目录
相关文章
|
Python
Python文件操作功能
Python文件操作功能
120 1
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
SQL 存储 分布式计算
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
210 9
|
缓存 负载均衡 安全
介绍一下Nginx的反向代理功能吧
【8月更文挑战第22天】介绍一下Nginx的反向代理功能吧
261 0
|
8月前
|
Java
【Azure Application Insights】配置 JMX 指标无法收集到参数的情况
在使用 Application Insights Java 3.x 收集 JMX 指标时,若无法收集到数据且程序无报错,通常是由于不同 Java 版本中 JMX 的属性名称不同所致。确保配置正确的 `name` 和 `attribute` 值至关重要。对于 GC 相关指标,建议参考特定配置,并使用 JMXTerm 工具查看当前环境中的 JMX 指标值,以确认属性名称的准确性。详细配置和解决方法可参见官方文档及 troubleshooting 指南。
109 5
sql面试50题------(21-30)
这篇文章是SQL面试题的21至30题,涵盖了查询不同老师所教课程的平均分、按分数段统计各科成绩人数、查询学生平均成绩及其名次等问题的SQL查询语句。
sql面试50题------(21-30)
|
JavaScript Dubbo 应用服务中间件
Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布
Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布
1051 73
|
jenkins 持续交付
基于Jeecgboot前后端分离的平台后端系统采用jenkins发布
基于Jeecgboot前后端分离的平台后端系统采用jenkins发布
196 1
|
运维 Cloud Native 网络协议
【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令(Instruction)和操作命令;每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建(也就是你要执行的操作命令)。
776 0
【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】
|
NoSQL 数据可视化 安全
Redis安装详解—官方原版
Redis安装详解—官方原版
336 0