结构型设计模式-组合(对象树) Composite

date
Apr 15, 2021
slug
design-pattern-composite
status
Published
tags
设计模式
summary
type
Page

简介

组合模式又叫对象树,将对象按照树形结构串起来,呈现出局部和整体相同的特性。
树中每个节点都由两部分组成,首先节点有自己的业务数据,其次节点内可以含有子节点集合。
比如盒子中可以放物品,也可以放其他小盒子,小盒子里又可以放物品和其他更小的盒子。
当计算盒子的物品价格时,只需要将盒子里本身的物品价格,加上小盒子里所有物品价格即可,递归处理。
notion image

角色

  • 抽象节点 Component
    • 定义一个节点的基础方法,如内部添加子节点等
  • 具体节点之叶子节点 Leaf
    • 叶子节点没有子节点
  • 具体节点之非叶子节点 Composite/Container
    • 非叶子节点,可添加子节点
或者也可以不区分是否是叶子节点,都视为节点即可
 

类图

图中显示,Leaf 和 Composite 都实现 Component 接口。
Composite 可添加或删除子节点,execute 则指派调用子节点的 execute 方法。
Leaf 的 execute 是真正执行逻辑的地方
notion image
 

代码

 
output:
 

© 菜皮 2020 - 2024