学习组合模式,转载一段有关组合模式的详解

来源:互联网 发布:sql导入access 编辑:程序博客网 时间:2024/05/14 11:23
               学习组合模式,转载一段有关组合模式的详解,从定义中可以看出,组合模式用来表示部分与整体的层次结构(类似于树结构),而且也可以使用户对单个对象(叶子节点)以及组合对象(飞鸽传书)的使用具有一致性,一致性的意思就是说,这些对象都拥有相同的接口。

                 很多书中包括文章都喜欢使用公司、子公司以及部门的例子,这其实就是一个典型的树结构。其实生活当中的树结构还有很多,比如书的目录、文件系统、网站的菜单等等,有很多很多。

                 我们先来看看组合模式的类图,引自百度百科。


                 类图当中有三个类,一个是Component(节点的统一接口),它的目的是为了统一节点的操作。接下来的两个实现类,一个则是非叶子节点(Composite),它可以有子节点。另外一个则是叶子节点(Leaf),它不能含有子节点。

                 我们随便挑一个树结构的例子,比如文件系统,我们来分析一下,在文件系统中,如果使用组合模式,各个部分的类都应该是什么样子的。

                 首先,文件系统中,叶子节点是文件,非叶子节点是文件夹,所以Leaf和Composite实现类就是文件和文件夹。对于Component接口,其实也很简单,就是提取文件和文件夹的共性就可以了。

                 很显然,二者的共性有很多,比如都可以进行复制、剪切、删除、重命名等操作。但是不同的是,对于文件和文件夹的这些操作是有细微的区别的,最明显的就是删除操作,如果是文件,那么我们只需要删除当前文件即可,而如果是文件夹,则需要删除文件夹下的所有文件以及文件夹,然后再删除该文件夹。

                 那么定义当中的一致性就体现在,我们的客户端不需要知道当前操作的是文件还是文件夹,它只知道它要进行删除操作,而我们去针对文件类别的不同去进行相应的处理。

                 下面我们来模拟一下组合模式,采用文件系统。

                 首先,我们先给出一个接口,它相当于Component接口,定义了文件与文件夹的公共行为。

原创粉丝点击