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

Java设计模式中的组合模式

2024-04-02 19:04:59 758人浏览 薄情痞子

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

摘要

目录模式介绍UML类图组合模式案例组合模式的注意事项和细节模式介绍 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以

模式介绍

  • 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体_部分”的层次关系。
  • 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
  • 这种类型的设计模式属于结构型模式。
  • 组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一-致的方式处理个别对象以及组合对象

UML类图

类图解析:

  • Component :这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默认行为,用于访问和管理。Component子部件, Component可以是抽象类或者接口。
  • Leaf:在组合中表示叶子节点,叶子节点没有子节点
  • Composite :非叶子节点,用于存储子 部件,在 Component接口中实现子部件的相关操作,比如增加(add),删除(delete)。

组合模式案例

背景介绍:一所大学包含多个学院,学院又包含多个学科专业

OrganizationComponent(抽象类)

public abstract class OrganizationComponent {
    private String name;
    private String des;
    
    protected void add(OrganizationComponent o) {
        throw new UnsupportedOperationException("该方法不支持");
    }
    protected void remove(OrganizationComponent o) {
        throw new UnsupportedOperationException("该方法不支持");
    }
    public OrganizationComponent(String name, String des) {
        this.name = name;
        this.des = des;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDes() {
        return des;
    }

    public void setDes(String des) {
        this.des = des;
    }

    
    protected abstract void print();
}

Department(专业类)

public class Department extends OrganizationComponent{
    public Department(String name, String des) {
        super(name, des);
    }
    @Override
    protected void print() {
        System.out.println(getName());
    }
}

College(学院类)

public class College extends OrganizationComponent {
    List<OrganizationComponent> departments = new ArrayList<>();

    public College(String name, String des) {
        super(name, des);
    }
    @Override
    protected void add(OrganizationComponent o) {
        departments.add(o);
    }
    @Override
    protected void remove(OrganizationComponent o) {
        departments.remove(o);
    }
    @Override
    protected void print() {
        System.out.println("-----------" + getName() + "-----------");
        departments.forEach(OrganizationComponent::print);
    }
}

University(大学类)

public class University extends OrganizationComponent {
    List<OrganizationComponent> colleges = new ArrayList<>();

    public University(String name, String des) {
        super(name, des);
    }

    @Override
    protected void add(OrganizationComponent o) {
        colleges.add(o);
    }

    @Override
    protected void remove(OrganizationComponent o) {
        colleges.remove(o);
    }
    @Override
    protected void print() {
        System.out.println("-----------" + getName() + "-----------");
        colleges.forEach(OrganizationComponent::print);
    }
}

Client(测试类)

public class Client {
    public static void main(String[] args) {
        // 创建大学
        University university = new University("清华大学", "中国顶级大学");

        // 计算机学院
        College computerCollege = new College("计算机学院", "计算机学院");
        College infoEngineerCollege = new College("信息工程学院", "信息工程学院");
        // 创建专业 并添加
        computerCollege.add(new Department("软件工程","软件工程不错"));
        computerCollege.add(new Department("网络工程","网络工程不错"));
        computerCollege.add(new Department("计算机科学与技术","计算机科学与技术老牌专业"));

        infoEngineerCollege.add(new Department("通信工程","通信工程不好学"));
        infoEngineerCollege.add(new Department("信息工程","信息工程好学"));

        // 添加学院到大学
        university.add(computerCollege);
        university.add(infoEngineerCollege);

        // 打印
        university.print();
    }
}

实现结果:

组合模式的注意事项和细节

  • 简化客户端操作。客户端只需要面对一致的对象而不用考虑整体部分或者节点叶子的问题。
  • 具有较强的扩展性。当我们要更改组合对象时,我们只需要调整内部的层次关系,客户端不用做出任何改动。
  • 方便创建出复杂的层次结构。客户端不用理会组合里面的组成细节,容易添加节点或者叶子从而创建出复杂的树形结构。
  • 需要遍历组织机构,或者处理的对象具有树形结构时,非常适合使用组合模式
  • 要求较高的抽象性,如果节点和叶子有很多差异性的话,比如很多方法和属性都不一样,不适合使用组合模式。

到此这篇关于Java设计模式中的组合模式的文章就介绍到这了,更多相关Java组合模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

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

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

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

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

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

  • 微信公众号

  • 商务合作