zoukankan      html  css  js  c++  java
  • Java设计模式(8)——结构型模式之组合模式(Composite)

    一、概述

      定义

      将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。

      简图

      

       角色——对应上图中顶点为Component,左边为Leaf,右边为Composite

      1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component
    子部件。
      2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。
      3.Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除

    二、实践

      按照上面的角色,建立相应的类

      Component:

    /**
     * 抽象构件角色
     * 作者: Administrator
     * 日期: 2017/10/28
     **/
    public abstract class Component {
        public abstract void draw();
        public abstract void add(Component c);
        public abstract boolean remove(Component c);
        public abstract Component get(int i);
    }

      Leaf叶子节点:当然可以有多个

    /**
     * Leaf叶子节点
     * 作者: Administrator
     * 日期: 2017/10/28
     **/
    public class Leaf extends Component{
        @Override
        public void draw() {
    
        }
    
        @Override
        public void add(Component c) {
    
        }
    
        @Override
        public boolean remove(Component c) {
            return false;
        }
    
        @Override
        public Component get(int i) {
            return null;
        }
    }

      Composte组合树枝节点

    /**
     * 组合类树枝节点
     * 作者: Administrator
     * 日期: 2017/10/28
     **/
    public class Composite extends Component{
        private List<Component> childList = new ArrayList<>();
    
        @Override
        public void draw() {
    
        }
    
        @Override
        public void add(Component c) {
            childList.add(c);
        }
    
        @Override
        public boolean remove(Component c) {
            return childList.remove(c);
        }
    
        @Override
        public Component get(int i) {
            return childList.get(i);
        }
    }

    三、改进与思考

      适用的情况

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

  • 相关阅读:
    前端 JS 原生JS实现一个单页应用的路由 router
    Gitbook 使用笔记
    EF Core 抓取SQL语句
    .NET5.0 MVC Session 的使用
    SQL Server 实用语句
    .NET5.0 MVC 生成发布(问题+技巧)
    服务器 SQL Sserver2012 开启远程连接
    windows 安装 Redis5.0 并运行
    前端 JS 学习笔记(知识点记录)
    CentOS 7 单机安装Redis Cluster(3主3从)
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7748080.html
Copyright © 2011-2022 走看看