设计模式 组合模式

组合模式(Composite Pattern):组成多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。组合模式又可以称为"部分-整体"(Part-Whole)模式,属于对象的结构模式,他将对象组织到树结构中,可以用来描述整体与部分的关系。

 

模式动机:

  组合模式描述了如何将容器对象和叶子对象进行递组合,使得用户在使用时无需对他们进行区分,可以一致的对待容器对象和叶子对象。

 

模式结构:

  • Component:抽象构件
  • Leaf:叶子构件
  • Composite:容器构件
  • Client:客户类

模式分析:

  组合模式的关键是定义一个抽象类,它既可以代表叶子、又可以代表容器,而客户端针对该抽象构件类进行编程,无需知道他到底表示的时叶子还是容器,可以进行统一的处理。

  同时容器对象与抽象构件之间还建立了一个聚合关联关系,在容器对象中既可以包含叶子,也可以包含容器,以此实现递归组合,形成一个树形结构。

具体类图:

                  

 

类图解析:MyElement是定义的抽象构件类,Apple,Banana,Pear,Plate继承自它,Plate是一个果盘类,其内部包含一个MyElement类型的集合

具体代码实现:

 

 

Plate继承MyElement,并且eat方法里面还有对MyElement类型的对象的调用,因此可以递归的进行遍历,而不用区分其具体类型。

 

 组合模式的优点:

  • 可以清楚的定义分层次的复杂对象
  • 客户端可以一致的使用组合结构或其中单个对象
  • 可以形成复杂的树形结构
  • 更容易在组合体内部加入对象组件

缺点:

  • 使设计变得更加抽象
  • 增加新构件时可能会产生一些问题
posted @ 2021-11-29 15:22  见怪见外  阅读(40)  评论(0编辑  收藏  举报