10、组合模式

2023-11-17

文章目录


概念

  • 用于树形结构;
  • 这种类型的设计模式属于结构型模式;
  • 组合模式使得用户对单个对象和组合对象的使用具有一致性。

demo

import java.util.ArrayList;

/**
 * 1,Component抽象构件角色;   定义参加组合对象的共有方法和属性, 可以定义一些默认的行为或属性;
 * 2,Leaf叶子构件;  叶子对象, 其下再也没有其他的分支, 也就是遍历的最小单位。
 * 3,Composite树枝构件; 树枝对象, 它的作用是组合树枝节点和叶子节点形成一个树形结构。
 * 用于树形结构
 */
public class Composite {

    public static void main(String[] args) {
        //创建一个根节点
        Compositez root = new Compositez();
        root.common();
        //创建一个树枝构件
        Compositez branch = new Compositez();
        //创建一个叶子节点
        Leaf leaf = new Leaf();
        //建立整体
        root.add(branch);
        branch.add(leaf);
        display(root);
    }

    //通过递归遍历树
    private static void display(Compositez root) {
        for (Component c : root.getChildren()) {
            if (c instanceof Leaf) { //叶子节点
                c.common();
            } else { //树枝节点
                display((Compositez) c);
            }
        }
    }
}

abstract class Component {
    //个体和整体都具有的共享
    public abstract void common();
}


class Compositez extends Component {
    //构件容器
    private ArrayList<Component> componentArrayList = new ArrayList<Component>();

    //增加一个叶子构件或树枝构件
    public void add(Component component) {
        this.componentArrayList.add(component);
    }//删除一个叶子构件或树枝构件

    public void remove(Component component) {
        this.componentArrayList.remove(component);
    }

    //获得分支下的所有叶子构件和树枝构件
    public ArrayList<Component> getChildren() {
        return this.componentArrayList;
    }

    @Override
    public void common() {
        System.out.println("branch");
    }
}

class Leaf extends Component {

    @Override
    public void common() {
        System.out.println("do something");
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

10、组合模式 的相关文章

随机推荐

  • CLIP视觉编码器

    VisionTransformer conv1 Conv2d 3 768 kernel size 16 16 stride 16 16 bias False ln pre LayerNorm 768 eps 1e 05 elementwis
  • 使用docker在基础镜像上集成tomcat

    当我们对基础镜像版本和tomcat版本有要求时 可以尝试自己集成所需的镜像 不必每次都去拉取其他人提供的镜像 然后在此基础镜像上部署自己的应用 目标版本 基础镜像版本 ubuntu 16 04 JDK版本 jdk1 8 0 191 tomc
  • gitlab-建代码仓库

    一 生成 添加SSH公钥 你可以按如下命令来生成 sshkey ssh keygen t ed25519 C xxxxx xxxxx com 这里的 xxxxx xxxxx com 只是生成的 sshkey 的名称 并不约束或要求具体命名为
  • dwr反转ajax功能,dwr实现Reverse Ajax推送技术的三种方式

    DWR2 x的推技术也叫DWR Reverse Ajax 逆向Ajax 主要是在BS架构中 从服务器端向多个浏览器主动推数据的一种技术 在DWR所开的线程中使用Reverse Ajax时 经过WebContextFactory get 获取
  • GD32 CAN波特率计算问题

    一 问题描述 以下是GD32F205 CAN0的配置代码 将CAN0的波特率设置为125kbps 其中影响波特率的几个关键参数为resync jump width time segment 1 time segment 2和prescale
  • 关于TagsView的一些记录

    参考TagsView原链接https blog csdn net Dream xun article details 83146106 开发项目时 使用基础tagsView遇到的问题 代码基本上与原链接一致 仅有一些基础功能 本人开发项目为
  • git哪些你不太理解的术语

    Repository 简称Repo 可以理解为 仓库 我们的项目就存放在仓库之中 也就是说 如果我们想要建立项目 就得先建立仓库 有多个项目 就建立多个仓库 Issues 可以理解为 问题 举一个简单的例子 如果我们开源一个项目 如果别人看
  • Linux高级命令06:文件权限命令

    学习目标 能够使用chmod命令完成文件权限的修改 1 chmod命令的介绍 命令 说明 chmod 修改文件权限 chmod修改文件权限有两种方式 字母法 数字法 2 chmod 字母法的使用 角色说明 角色 说明 u user 表示该文
  • es集群的安装配置

    es集群的安装配置 1 集群的部署步骤 2 集群的应用 2 1 操作指令 2 2 数据插入 2 3 指定分片和副本数目 2 4 分词器 1 集群的部署步骤 集群状态颜色 绿色 所有条件都满足 数据完整 副本满足 黄色 数据完整 副本不满足
  • Unity开发-你必须知道的优化建议

    最近研究U3D开发 个人认为 精通一种新的技术 最快最好的方法就是看它的document 而且个人习惯不喜欢看中文的资料 原汁原味的东西是最正确的 一翻译过来很多东西就都不那么准确了 于是通读了unity的官方manuel 最后面几章都是精
  • 在linux系统上使用conda 安装GPU版本TensorFlow-GPU(详细步骤)

    文章目录 使用conda 还是miniconda 一 下载miniconda 可以选择python版本等信息 二 安装miniconda 根据提示按 Enter 和输出 yes 三 创建虚拟环境 四 激活虚拟环境 安装Tensorflow
  • XSS跨站脚本漏洞简介、原理及防护方法

    目录 1 XSS跨站脚本漏洞简介 2 XSS漏洞分类 3 XSS漏洞原理 4 XSS漏洞利用 4 1XSS基础漏洞利用 4 2XSS平台利用 5 XSS攻击过程 6 XSS漏洞防护 1 XSS跨站脚本漏洞简介 XSS又叫CSS cross
  • Windows 使用nvm安装多个版本的node.js

    在 Windows 上 首先你需要安装 Node Version Manager 请访问 nvm windows GitHub 页面并下载最新版本的 nvm setup zip 文件 解压并运行里面的安装程序 安装完成后 你可以按照以下步骤
  • 《算法图解》读书笔记(二)

    第六章 图 广度优先搜索 1 解决最短路径问题 shortest path problem 的算法被称为广度优先搜索 breadth first search 2 图由节点 node 和边 edge 组成 一个节点可能与众多节点直接相连 这
  • conda 常用命令

    一 虚拟环境创建 删除 查看 创建 创建一个名为env name的虚拟环境 并指定python版本为3 8 且不需要询问 yes or no 直接创建 conda create n env name python 3 8 y 例如 cond
  • 深度学习怎么学?

    推荐这本小白看的 深度学习 从基础到实践 上下册 深度学习 从基础到实践 上下册 深入浅出的讲述了深度学习的基本概念与理论知识 不涉及复杂的数学内容 零基础小白也能轻松掌握 本书从基本概念和理论入手 通过近千张图和简单的例子由浅入深地讲解深
  • 微信小程序 wx:for 点击事件

    为列表的每个小项都添加点击事件 并获得每个项的一些数据 wxml中 lt view wx for array gt lt view bindtap click data name item name gt item name click是点
  • react引入Ant Design

    需要先安装 zeit next css 不然不能识别css文件 然后根目录下创建next config js进行配置 const withCss require zeit next css if typeof require undefin
  • 几种ajax传参数到后台获取的方法

    传参 ajax type post dataType json url DataSourceCheck refreshDataSource data dataSourceId dsId success function data 你的逻辑
  • 10、组合模式

    文章目录 概念 demo 概念 用于树形结构 这种类型的设计模式属于结构型模式 组合模式使得用户对单个对象和组合对象的使用具有一致性 demo import java util ArrayList 1 Component抽象构件角色 定义参