设计模式之组合模式

  组合模式,又叫做“部分-整体模式”,它属于结构型设计模式,创建了对象组的树形结构。

  定义:将对象组合成树形结构以表示“部分-整体”的层次关系,使得用户在对单一对象和组合对象的使用具有一致性。

  问题描述:构建一个树形结构的复杂对象,并能区分部分和整体的差异,且用户可以一致性地对它们进行操作。

  解决方案:抽象出容器类和叶子类的共有的行为和方法,并分别去实现。

  结构图

  举个栗子:讲一个总公司、分公司和子公司的故事。。。

  总公司由若干个分公司组成,分公司又由若干个子公司组成,总公司、分公司和子公司所共有的行为由添加属下公司、解除属下公司、批量添加属下公司和批量解除属下公司,将这四种行为抽象出来并分别去操作和实现。具体实现方式如下:

  1. 抽象构件类Company,包含公司类的共有方法。代码如下:

         

  2. 具体容器类HeadOffice(总公司)和BranchOffice(分公司),分别重写父类Company中定义的方法。代码如下:

      

      

  3. 叶子节点类SubOffice,注意它没有子节点,所以它不需要去重写父类中的方法。代码如下:

      

  4. 在类CompositeFragment中分别实例化各个对象的实例,然后进行相应的操作。核心代码如下:

           

  5. 运行后的效果如下:

     

  综上,容器类及其叶子类的使用方法完全一致,并且新增叶子类和容器类也很方便。

  优点

  1. 高层模块调用简单;

  2. 节点自由增加。

  缺点

  1. 不能限制容器下的叶子类型,因为所有的容器和叶子都继承自一个父类或依赖于一个接口;

  2. 容器和叶子的声明都是实现类,而不是接口,违反了依赖倒置原则。

  适用场景

  1. 表示对象的部分-整体的层次结构;

  2. 忽略单个对象和组合对象的不同,希望统一使用它们。

原文地址:https://www.cnblogs.com/chenxkang/p/6756541.html