设计模式(9)-结构型模式之 组合模式

1. 组合模式介绍

1.1 定义

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

1.2 意图

将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性

这句话啥意思呢?说白了,就是你调用组合的对象,和单个的对象其方法是一模一样的,你不用关心其内做了什么。

1.3 啥时候使用

  1. 您想表示对象的部分-整体层次结构(树形结构)
    可以想到,比如菜单树。有多级菜单。那么最后一个能点出页面的那个菜单,就是叶子菜单,也就是单个对象。那么其他点击一下会出来下级菜单的,他就是组合对象。
    在比如,文件与文件夹的关系,你文件夹里面还可能有文件夹,文件夹里面可能有文件,但是文件里面就不能有东西了,那么这个文件,就是单个对象,那么那个文件夹,也就是组合对象了,因为它里面可能既有文件与文件夹。那么,你在表示这种数据结构的东西的时候,可以考虑使用组合模式来表示。
  2. 您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

2. 代码

2.1 场景介绍

比如我们的文件夹表示,他就是多级树形结构,那么存储这种东西,就适合用我们的组合模式。
比如你删除一个文件,与删除一个文件夹,所用的操作是一样的把?这就叫"使得用户对单个对象和组合对象的使用具有一致性。"比如我们查看文件的描述,那也是一样的。所以我们就来模拟一下。

2.2 代码

  • 单个文件与文件夹的抽象类
    设计模式(9)-结构型模式之 组合模式

  • 文件夹实现类
    设计模式(9)-结构型模式之 组合模式

  • 文件的实现类
    设计模式(9)-结构型模式之 组合模式

  • client代码
    设计模式(9)-结构型模式之 组合模式

  • 运行的结果
    设计模式(9)-结构型模式之 组合模式

2.3 类图

设计模式(9)-结构型模式之 组合模式

3. 总结

这个模式总体来说不难理解。也知道什么适合运用。