设计模式之----组合模式
定义: 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及组合对象。
举一个很简单的例子,我们有两个类一个是菜单类Menu,另一个是菜单项类MenuItem(几个菜单项类组成一个菜单)
比如说我们有个几个菜单项类,如:烤鸭,红烧肉,西红柿炒鸡蛋
这几个构成了午餐菜单,我们这里不但有午餐还有晚餐和早餐
我们用一个ArrayList来存储菜单
ArrayList<Menu> menus = new ArrayList<>();
在这个ArrayList中,我们只能存储Menu类,不能存储MenuItem类
但是我们想在晚餐中加入甜点菜单,因为甜点也算晚餐中的一道菜
但是我们没法在菜单中加入,因为晚餐菜单是由MenuItem类构成的
我们所希望实现的状态应该是上图的表现形式,但是我们没法使用一种数据结构使Menu和MenuItem混用
所以我们引用组合模式,组合模式通过树形结构让Menu和MenuItem可以混用
上面的图就可以改成
这样,所有的叶子节点其实都是MneuItem类,我们通过叶子节点的组合组合出了菜单节点,而且使菜单和菜单项可以混合存储
这就是组合节点的好处,可以忽略对象组合和个别对象之间的差异