关于组合模式我所知道的

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

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


目录
相关文章
|
2月前
|
设计模式 缓存 算法
C#一分钟浅谈:组合模式与外观模式
【10月更文挑战第15天】本文介绍了面向对象设计模式中的组合模式和外观模式。组合模式通过树形结构表示“部分-整体”的层次关系,适用于文件系统、图形界面等场景;外观模式提供统一接口简化复杂系统的使用,适用于视频播放器等多模块系统。文章详细解释了这两种模式的基本概念、应用场景、实现方式及常见问题和解决方法,帮助读者更好地理解和应用。
42 9
|
7月前
|
存储 安全
结构型 组合模式
结构型 组合模式
32 0
|
设计模式 Java 容器
设计模式~组合模式(composite)-16
目录 (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例 代码
64 0
|
存储 设计模式 安全
结构型模式-组合模式
结构型模式-组合模式
90 0
|
设计模式
我学会了,组合模式
组合模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。
110 0
我学会了,组合模式
|
安全 Java 容器
结构型:组合模式 Composite
主要内容有: 该模式的介绍,包括: 引子、意图(大白话解释) 类图、时序图(理论规范) 该模式的代码示例:熟悉该模式的代码长什么样子 该模式的优缺点:模式不是万金油,不可以滥用模式 该模式的应用案例:了解它在哪些重要的源码中被使用
166 0
|
存储
享元模式与组合模式(1)
享元模式与组合模式(1)
149 0
享元模式与组合模式(1)
|
存储 设计模式 Java
享元模式与组合模式(3)
享元模式与组合模式(3)
149 0
享元模式与组合模式(3)
|
设计模式 存储 人工智能
享元模式与组合模式(4)
享元模式与组合模式(4)
109 0
享元模式与组合模式(4)
|
存储
享元模式与组合模式(2)
享元模式与组合模式(2)
193 0
享元模式与组合模式(2)