组合模式原型解析

组合模式定义:

组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义。

组合模式可以让客户端像修改配置文件一样简单的完成本来需要流程控制语句来完成的功能。

组合模式使用场景

  • 场景一:表示对象整体和局部结构的时候,需要使用组合模式。
  • 场景二:从一个整体中能够独立出部分模块或者功能的场景下,我们可以使用组合模式。

经典案例:系统目录结构,网站导航结构等。

组合模式角色划分

角色一:抽象根节点(抽象类、接口)->Component
角色二:具体子节点->Composite
角色三:叶子节点(注意:没有儿子->没有子节点)->Leaf

原型案例

角色一:抽象节点

public abstract class Component {

  //节点名称
  private String nodeName;

  public Component(String nodeName){
      this.nodeName = nodeName;
  }
  public String getNodeName() {
    return nodeName;
}

  //定义一些业务逻辑
  public abstract void doSomeThing();

}

角色二:具体节点

public class Composite extends Component {

    private List<Component> componentList = new ArrayList<Component>();

    public Composite(String nodeName) {
        super(nodeName);
    }
    
    @Override
    public void doSomeThing() {
        System.out.println("具体节点:");
        System.out.println(getNodeName());
        for (Component component : componentList) {
            System.out.println(getNodeName()+"->"+component.getNodeName());
        }
    }

    public void addChild(Component child) {
        this.componentList.add(child);
    }

    public void removeChild(Component child) {
        this.componentList.remove(child);
    }

    public Component getComponent(int index) {
        return this.componentList.get(index);
    }

}

角色三:叶子节点

public final class Leaf extends Component {
    public Leaf(String nodeName) {
        super(nodeName);
    }

    @Override
    public void doSomeThing() {
        System.out.println("叶子节点");
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        Composite root = new Composite("总公司");
        root.addChild(new Leaf("子公司1"));
        root.addChild(new Leaf("子公司2"));
        root.addChild(new Leaf("子公司3"));

        root.doSomeThing();
    }
}

以上便是组合模式的基本使用,在Android中,ViewGroup便是组合模式的实例案例。
文章有误之处,望众大神在留言区指出,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,240评论 2 89
  • 参考资料:菜鸟教程之设计模式 设计模式概述 设计模式(Design pattern)代表了最佳的实践,通常被有经验...
    Steven1997阅读 1,264评论 1 12
  • 1 场景问题# 1.1 商品类别树## 考虑这样一个实际的应用:管理商品类别树。 在实现跟商品有关的应用系统的时候...
    七寸知架构阅读 6,238评论 10 59
  • 日复一日,年复一年。我觉得现在的自己是按着几年前的自己,点击右键复印,粘贴到现在。我还是一样,除了年纪大了点,皮肤...
    嘉欣妹阅读 583评论 0 0
  • 6ddd78d5b213阅读 207评论 0 0

友情链接更多精彩内容