结构型模式之组合模式

xiaoxiao2021-02-28  19

组合模式

以面向对象的方法处理树形结构问题对于树形结构,当容器对象的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象,牵一动百。定义:组合多个对象形成树形结构以表示具有“整体——部分”的层次结构。组合模式对单个对象(即叶子对象)和组合对象(容器对象)的使用具有一致性,组合模式又可以称为“整体——部分”模式,它是一种结构型模式。

组合模式的结构

在组合模式中引入了抽象构件类Component,它是所有容器类和叶子类的公共父类,客户端针对Component进行编程。

组合模式UML结构图

Component(抽象构件):包含了所有子类共有行为的声明和实现。在抽象构件中定义了访问及管理它的子构件的方法。Leaf(叶子构件):实现了在抽象构件中定义的行为。Composite(容器构件):提供一个集合用户存储子结点,实现在抽象构件中定义的行为,包括那些访问及管理子构件的方法,在业务方法中可以递归调用其子结点的业务方法。

组合模式代码框架

abstract class Component { public abstract void add(Component c); public abstract void remove(Component c); public abstract Component getChild(int index); public abstract void operation(); } class Leaf extends Component { public void add(Component c) { //异常处理和提示 } public void remove(Component c) { //异常处理或提示 } public Component getChild(int index) { //异常处理或错误提示 return null; } public void operation() { //叶子构件具体逻辑业务 } } class Composite extends Component { private ArrayList<Component> list = new ArrayList<>(); public void add(Component c) { list.add(c); } public void remove(Component c) { list.remove(c); } public Component getChild(int index) { return (Component)list.get(index); } public void operation() { //容器构架的具体逻辑业务 //递归调用成员构件的逻辑业务 for(Object object : list) { ((Component)object).operation(); } } }

其他组合模式

透明组合模式与安全组合模式

总结

优点 组合模式可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,它让客户忽略了层次的差异,方便对整个层地结构进行控制。客户端可以一致地使用一个组合结构中单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码。在组合模式中增加新的容器构件和叶子构件都很方便,无须对现有类库进行任何修改,符合开闭原则。组合模式为树形结构的面向对象实现提供了一种灵活的解决方案,通过叶子对象和容器对象的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。
转载请注明原文地址: https://www.6miu.com/read-2250001.html

最新回复(0)