广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java设计模式:组合模式
  • 320
分享到

Java设计模式:组合模式

2024-04-02 19:04:59 320人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录概述结构组合模式案例分析总结在本讲,我们来学习一下结构型模式里面的第六个设计模式,即组合模式。 概述 在学习组合模式之前,我们先来看下面这张图。 对于以上这张图大家应该很熟悉,

在本讲,我们来学习一下结构型模式里面的第六个设计模式,即组合模式。

概述

在学习组合模式之前,我们先来看下面这张图。

在这里插入图片描述

对于以上这张图大家应该很熟悉,我们可以将其看作是一个文件系统,其实说到底它就是windows系统里面的一个目录结构,只不过对于Windows中的文件系统而言,它里面包含有C盘、D盘、E盘等等盘符,而这里我们只是以它里面的某一个盘符里面的目录结构为例来进行了一个描述。

对于这样的结构我们称之为树形结构。为啥叫树形结构呢?你看一下上图中的左边部分,最上面是不是有一个WINDOWS目录啊,而该WINDOWS目录下面又有很多的子目录或者子文件,这样,我们就能将其描述成上图右边部分的树形结构了,它是不是很像一棵倒着的树啊!既然是一棵树,那么它就只有一个树根了,很明显,这个树根就是最顶层的WINDOWS目录,在该目录下,自然就会生成许多的子文件或者子文件夹了,而如果要是子文件夹的话,那么它下面又可以有许多的子文件或者子文件夹了,以此类推,一棵参天大树就长成了。

对于这样一个文件系统而言,有几个概念大家需要知道一下,文件夹或者文件我们都可称之为节点,但是一般来说,我们称文件为叶子节点,称文件夹为树枝节点,这是因为树枝还可以再去生成子树枝或者子叶子。

在这样一个树形结构中,我们可以通过调用某个方法来遍历整棵树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作了。因此,我们不妨将这颗树理解成一个大的容器,容器里面包含有很多的成员对象(其实就是节点对象),这些成员对象既可以是容器对象(即文件夹,当然你也可以把它称作是树枝对象)也可以是叶子对象(即文件)。但是由于容器对象和叶子对象在功能上面有所区别(区别是很明显的,叶子对象,即文件,可以读写数据,但是它下面不可能再有子文件或者子文件夹了;而容器对象,即文件夹,它下面是可以再有子文件或者子文件的,但是它不能进行数据的一个读写操作),使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样一来就会给客户带来不必要的麻烦,对于客户来说的话,他始终是希望能够一致的对待容器对象和叶子对象。也就是说,对于客户而言,不管是文件夹还是文件,他都希望一致的去对待它们,即把它们都当作同样的一个对象来进行处理。

至此,我们就认识了一下以上树形结构,并且咱们还知道了该树形结构所存在的一个问题。那如何解决该问题呢?很明显,就要用到组合模式了,因为本文讲的就是组合模式嘛!

那什么是组合模式呢?下面我们来看看它的概念。

组合模式又名部分整体模式(啥又叫部分整体模式呢?上面不是说过嘛,我们可以将一棵树理解成一个大的容器,对于该容器而言,它就是整体;然后它下面不是又有子文件或者子文件夹嘛,这些子文件或者子文件夹我们就称之为部分,当然,部分下面是不是还可以再分出部分来啊!),是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次,这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

看完以上组合模式的概念之后,相信大家就能知道应该要使用组合模式来解决以上树形结构所存在的问题了,因为对于客户而言,他就能一致的去对待容器对象和叶子对象了,这样,他使用起来也会变得更加简单。

结构

组合模式主要包含有三种角色:

  • 抽象根节点(Component):定义系统各层次对象具有的共有方法和属性,可以预先定义一些默认行为和属性。

怎么来理解抽象根节点呢?还是通过上图来理解,不管是文件夹还是文件,我们都可以向上抽取,抽取出一个抽象类,而在这个抽象类里面,我们就可以去定义文件和文件夹中的共有行为和属性了。也就是说,正是因为客户他想要一致的去对待容器对象和叶子对象,所以他就可以定义出这么一个公共的抽象类了

  • 树枝节点(Composite):定义树枝节点的行为,即存储子节点,组合树枝节点和叶子节点形成一个树形结构。
  • 叶子节点(Leaf):叶子节点对象,其下再无分支,是系统层次遍历的最小单位。

组合模式案例

接下来,我们就通过一个案例再来理解一下组合模式,这个案例就是软件菜单。

分析

先来看一下下面这张图。

在这里插入图片描述

相信大家还是比较熟悉以上这张图的,因为我们在访问别的一些管理系统时,经常可以看到类似的菜单。一个菜单可以包含菜单项(菜单项是指不再包含其他内容的菜单条目),也可以包含带有其他菜单项的菜单,就拿以上系统管理菜单来说,它下面有三个子菜单,分别是菜单管理、权限配置、角色管理,它们都是属于菜单,因为它们下面还可以有子菜单或者子菜单项。对于菜单管理来说,它下面有五个子菜单项,分别是页面访问、展开菜单、编辑菜单、删除菜单、新增菜单,注意了,它们都是菜单项,下面不可能再有子菜单或者子菜单项了,故它们都是属于叶子节点;而系统管理、菜单管理、权限配置、角色管理,它们均属于树枝节点,并且系统管理从根本上来说,它是属于根节点。因此,使用组合模式来描述以上菜单就很恰当了。

这样,我们的需求就是针对一个菜单,例如系统管理,打印出其包含的所有菜单以及菜单项的名称。

需求明确之后,接下来我们就要编写代码解决该需求了。首先,对于该需求,我们先设计出一个如下的类图。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Java设计模式:组合模式

本文链接: https://www.lsjlt.com/news/134205.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java设计模式:组合模式
    目录概述结构组合模式案例分析总结在本讲,我们来学习一下结构型模式里面的第六个设计模式,即组合模式。 概述 在学习组合模式之前,我们先来看下面这张图。 对于以上这张图大家应该很熟悉,...
    99+
    2022-11-12
  • Java设计模式之组合模式
    本文通过老王和小王探讨书房、书架、各类书的管理问题,引出结构型设计模式家族中的一个重要成员——组合模式,本文会给予两种组合模式的典型代码实现,为了加深理解会在...
    99+
    2022-11-13
  • java设计模式-组合模式详解
    目录组合模式Demo代码:总结组合模式 组合模式(Composite Pattern)又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来...
    99+
    2022-11-12
  • Java设计模式中的组合模式
    目录模式介绍UML类图组合模式案例组合模式的注意事项和细节模式介绍 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以...
    99+
    2022-11-13
  • Java设计模式之java组合模式详解
    目录引言组合模式介绍角色模式结构示例代码水果盘文件浏览更复杂的组合模式透明与安全透明组合模式安全组合模式组合模式总结优点缺点适用场景应用XML文档解析文件HashMapMybatis...
    99+
    2022-11-12
  • 分析Java设计模式之组合模式
    目录一、概述二、 模式定义三、 模式结构四、 模式实现五、 模式优缺点5.1、优点5.2、缺点六、 模式适用场景七、 模式总结一、概述 我们对于这个图片肯定会非常熟悉,这两幅图片我...
    99+
    2022-11-12
  • JavaScript设计模式组合设计模式案例
    目录前言组合设计模式的业务场景组合设计模式小案例前言 组合设计模式是用于将多个部分通过组合的方式行成一个整体,就比如我们去吃饭,点了一份米饭和一份鱼香肉丝,这些东西可以看成一个部分,...
    99+
    2022-11-13
  • Java设计模式之组合模式深入刨析
    目录1.基本介绍2.结构3.组合模式解决的问题4.组合模式解决学校院系展示5.组合模式的注意事项和细节1.基本介绍 1)组合模式(Composite Pattern),又叫部分整体模...
    99+
    2022-11-13
  • 如何理解Java设计模式的组合模式
    这篇文章主要介绍“如何理解Java设计模式的组合模式”,在日常操作中,相信很多人在如何理解Java设计模式的组合模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Java设计模式的组合模式”的疑惑有所...
    99+
    2023-06-25
  • 深入理解Java设计模式之组合模式
    目录一、什么是组合模式动机(Motivation)意图(Intent)二、组合模式的结构结构图说明:三、组合模式的使用场景四、组合模式的优缺点五、组合模式的实现六、组合模式的.NET...
    99+
    2022-11-12
  • Java设计模式之组合模式实例分析
    这篇文章主要介绍“Java设计模式之组合模式实例分析”,在日常操作中,相信很多人在Java设计模式之组合模式实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java设计模式之组合模式实例分析”的疑惑有所...
    99+
    2023-06-30
  • 快速理解Java设计模式中的组合模式
    组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系。个人理解:组合模式就是将部分组装成整体。定义如下:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象...
    99+
    2023-05-30
    java 设计模式 ava
  • Java设计模式之组合模式的示例详解
    目录定义原理类图案例需求方案分析总结定义 组合模式,又叫部分整体模式,它创建了对象组的数据结构(将对象组合成树状结构,用来表示部分整体的层级关系)组合模式使得用户对单个对象和组合对象...
    99+
    2022-11-13
  • Java结构型设计模式之组合模式详解
    目录组合模式应用场景优缺点主要角色组合模式结构分类透明组合模式创建抽象根节点创建树枝节点创建叶子节点客户端调用安全组合模式创建抽象根节点创建树枝节点创建叶子节点客户端调用组合模式 组...
    99+
    2022-11-13
  • Python设计模式结构型组合模式
    目录一、组合模式二、应用场景三、代码示例一、组合模式 组合,将多个对象组合成为一个树状结构,来表示业务逻辑上的层次。组合模式使得用户对单个对象和组合对象的使用具有一致性。 比如,描述...
    99+
    2022-11-13
  • Golang设计模式之组合模式讲解
    目录组合模式概念示例组合模式 组合是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。 对于绝大多数需要生成树状结构的问题来说, 组合都是非...
    99+
    2023-01-14
    Go组合模式 Go组合模式
  • php设计模式-组合模式的运用
    介绍 PHP的组合模式是一种设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。该模式允许客户端统一处理单个对象和组合对象,使得客户端在处理对象时不需要知道对象是否为单个对象还是组合对...
    99+
    2023-08-31
    组合模式 php 设计模式
  • Android设计模式系列之组合模式
    Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用。在android UI设计,几乎所有的widget和布局类都依靠这两个类...
    99+
    2022-06-06
    组合模式 Android
  • Java结构型设计模式之组合模式CompositePattern详解
    目录概述三大组件应用案例顶层组件OrganizationComponentComposite组件叶子节点客户端测试UML类图总结概述 组合模式(Composite Pattern),...
    99+
    2022-11-13
    Java Composite Pattern Java 组合模式
  • 每天一个设计模式之组合模式
    作者按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) 原文地址是:《每天一个设计模式之组合模式》 欢迎...
    99+
    2023-01-31
    模式 组合
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作