组合模式-Composite

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

组合模式结构图:

透明方式与安全方式:

  • 透明方式:在Component中声明所有用来管理子对象的方法,例如add remove的等。这样继承Component的所有子对象都具备了add和remove方法。这样做的好处是叶节点和树枝节点对于外界没有区别,他们具有完全一致的行为接口。但是问题也很明显,因为Leaf类本身不具备add和remove方法的功能,所以实现它是完全没有意义的。
  • 安全方式:在Component中不去声明add和remove方法,那么子类Leaf也就不需要去实现它,而是在Component声明所有用来管理子类对象的方法,不过由于不够透明,所以树叶和树枝类将具有不同的方法,客户端在调用的时候需要做相应的判断,带来了不便。

何时使用组合模式:需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同时,统一使用组合结构中的所有对象时,就因该考虑用组合模式了。

代码实现:

原文地址:https://www.cnblogs.com/LionheartCGJ/p/7011777.html