组合模式的学习

博客介绍了如何使用组合模式改进传统的学校院系展示方案。通过创建对象组的树形结构,使得对单个对象和组合对象的操作一致,简化客户端操作,并提供了更强的扩展性和树状结构的遍历能力。同时,文章探讨了组合模式的优缺点及其适用场景。
摘要由CSDN通过智能技术生成

学校院系展示

 在一个页面展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。

 

传统方案

在这里插入图片描述

 根据组织大小分层次。

 但该方案不好实现对学校、系的添加、删除、遍历等。

 解决方案:把学校、院、系都看作组织结构,他们不是继承关系,而是树形结构,可以更好地实现管理操作。=》组合模式

 

组合模式

 创建了对象组的树形结构,将对象组合成树状结构以表示 整体-部分的层次关系。

 该模式使得用户对单个对象和组合对象的访问具有一致性。使客户能让一致的方式处理个别对象以及组合对象。
 

组合模式结构

在这里插入图片描述 1.组件 (Component) 接口描述了树中简单项目和复杂项目所共有的操作。

 2.叶节点 (Leaf) 是树的基本结构, 它不包含子项目。

 一般情况下, 叶节点最终会完成大部分的实际工作, 因为它们无法将工作指派给其他部分。

 3.容器 (Container)——又名 “组合 (Composite)”——是包含叶节点或其他容器等子项目的单位。 容器不知道其子项目所属的具体类, 它只通过通用的组件接口与其子项目交互。

 容器接收到请求后会将工作分配给自己的子项目, 处理中间结果, 然后将最终结果返回给客户端。

 4.客户端 (Client) 通过组件接口与所有项目交互。 因此, 客户端能以相同方式与树状结构中的简单或复杂项目交互。
 

组合模式适合应用场景

  1.如果你需要实现树状对象结构, 可以使用组合模式。

  2.如果你希望客户端代码以相同方式处理简单和复杂元素, 可以使用该模式。
 

实现方式

 1.确保应用的核心模型能够以树状结构表示。 尝试将其分解为简单元素和容器。 记住, 容器必须能够同时包含简单元素和其他容器。

 2.声明组件接口及其一系列方法, 这些方法对简单和复杂元素都有意义。

 3.创建一个叶节点类表示简单元素。 程序中可以有多个不同的叶节点类。

 4.创建一个容器类表示复杂元素。 在该类中, 创建一个数组成员变量来存储对于其子元素的引用。 该数组必须能够同时保存叶节点和容器, 因此请确保将其声明为组合接口类型。

 实现组件接口方法时, 记住容器应该将大部分工作交给其子元素来完成。

 5.在容器中定义添加和删除子元素的方法。

 记住, 这些操作可在组件接口中声明。 这将会违反_接口隔离原则_, 因为叶节点类中的这些方法为空。 但是, 这可以让客户端无差别地访问所有元素, 即使是组成树状结构的元素。
 

组合模式优缺点

 优点:
   ​✔️​你可以利用多态和递归机制更方便地使用复杂树结构。
   ​✔️​开闭原则。 无需更改现有代码, 你就可以在应用中添加新元素, 使其成为对象树的一部分。

  缺点:
   ❌对于功能差异较大的类, 提供公共接口或许会有困难。 在特定情况下, 你需要过度一般化组件接口, 使其变得令人难以理解。

 

更改后的项目

在这里插入图片描述

代码:

public abstract class OrganizationCompoent {
   
    private String name; //名字
    private String des; //说明

    public OrganizationCompoent(String name, String des) {
   
        super();
        this.name = name;
        this.des = des;
    }

    protected void add(OrganizationCompoent organizationCompoent){
   
        //默认实现
        throw new UnsupportedOperationException();
    }

    protected void remove(OrganizationCompoent organizationCompoent){
   
        //默认实现
        throw new Unsup
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值