设计模式之组合模式

关于组合模式,大部分都是写的“部分——整体“的关系,部分组成了整体,把部分和整体可以看成一体。

可以把复杂的对象看做简单的对象。不过,再怎么说,我也觉得,这个模式还是没有深入的理解它的含义,印象不深刻。不过先说说我的认识。


在数据结构中,有树这种结构,尤其是特殊的二叉树,由此——产生了”组合模式“。组合模式=树形结构+递归。


看下组合模式的组成。

1)         抽象构件角色Component:它为组合中的对象声明接口,也可以为共有接口实现缺省行为。

2)       树叶构件角色Leaf:在组合中表示叶节点对象——没有子节点,实现抽象构件角色声明的接口。

3)       树枝构件角色Composite:在组合中表示分支节点对象——有子节点,实现抽象构件角色声明的接口;存储子部件。



如图所示:一个Composite实例可以像一个简单的Leaf实例一样,可以把它传递给任何使用Component的方法或者对象,并且它表现的就像是一个Leaf一样。

组合模式最常见的用处:1.树形菜单。2.操作系统的文件系统。

其实,就是看了那些例子也不太明白,为什么组合模式是这个样子?

慢慢回想,对比二叉树,才意识到了,有所不同。。。

以前写二叉树的只需要写一个节点类,而这个class需要定义节点的名字,以及固定的左孩子节点+右孩子节点,这样组合这些节点就能产生树。

而真正的菜单和文件系统,是不是也只有2个节点???肯定不是,既然不确定,当然没法直接定义一个通用的class,

那怎么办?

就是上面这种模式,component定义所有的方法,leaf就是最外层的叶子,没有下一级,而composite则是树枝,有下级。

那么我重新来说一下,正常的树木:

你可以把它抽象的看成,由树枝和树枝组成,最外层加上叶子。

比如说,冬天到了,叶子都落光了,是不是都是由树枝组成呢?


再拿,文件系统来说,文件+文件夹组成,而文件夹里面可以放文件,文件当然不能放文件夹。

把文件和文件夹,都看成最基本的一样东西,看成为一样的。因此,所有的文件+所有的文件夹=文件系统。

部分就组成了整体。

假如,你是一位大师,那你现在要设计一个菜单?那你该如何实现???是不是就应该学习这种方式。我的理解就是,原来这样。

这个代码就不贴了,都比较乱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值