组合模式原理

餐厅菜单新需求导致遍历困难

菜单聚类结构现状

image.png

添加餐后甜点子菜单

image.png

困难:数据结构、如何遍历?

结构抽象

image.png

组合模式原理

image.png

处理超类,改造迭代器,实现细节处理

image.png

示例代码讲解

类结构图

image.png

代码

1.超类 MenuComponent

image.png

空迭代器
image.png

2.子类 菜单项 MenuItem

image.png
image.png

3.子菜单 SubMenu

image.png

composeIterator迭代器

栈数据结构
peek 查询不弹出

image.png
image.png

4.中餐菜单 DinerMenu

image.png
image.png

image.png

image.png

5.西餐菜单 DinerMenu

image.png

关键点

原理和意义
对迭代器进行改造,菜单项如何遍历子菜单

数据结构考虑:menuItem,二维层面考虑

菜单项和子菜单、菜单都是属于一个超类,整体和部分的区别被超类取消了

无子菜单则返回空迭代器,有子菜单则返回迭代器,压入栈,下次访问。