首页 > 其他分享 >组合模式

组合模式

时间:2024-04-21 15:33:45浏览次数:21  
标签:String 组合 void 模式 name orgComponent public desc

 

  1. 组合模式介绍

  在解决组织结构这种具有层级关系的结构中,如果使用传统的继承,不能很好的实现管理的操作,比如学院,系的添加,删除,遍历等;

  所有可以使用组合模式把它们都看成组织结构,没有继承关系,而是一个树形结构。

 

  2. 实现

public abstract class OrgComponent {

    private String name;

    private String desc;

    public OrgComponent(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

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

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    //默认实现,子类不需要都实现
    protected void add(OrgComponent orgComponent){
        throw new UnsupportedOperationException();
    }

    protected void remove(OrgComponent orgComponent){
        throw new UnsupportedOperationException();
    }

    //抽象方法,子类都要实现
    protected abstract void print();
}
public class University extends OrgComponent {

    List<OrgComponent> list = new ArrayList<>();

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


    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDesc() {
        return super.getDesc();
    }

    @Override
    protected void add(OrgComponent orgComponent) {
        list.add(orgComponent);
    }

    @Override
    protected void remove(OrgComponent orgComponent) {
        list.remove(orgComponent);
    }

    @Override
    protected void print() {
        System.out.println("----" + getName() + "----");
        for (OrgComponent orgComponent : list){
            orgComponent.print();
        }
    }
}
public class College extends OrgComponent {

    List<OrgComponent> list = new ArrayList<>();

    public College(String name, String desc) {
        super(name, desc);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDesc() {
        return super.getDesc();
    }

    @Override
    protected void add(OrgComponent orgComponent) {
        list.add(orgComponent);
    }

    @Override
    protected void remove(OrgComponent orgComponent) {
        list.remove(orgComponent);
    }

    @Override
    protected void print() {
        System.out.println("----" + getName() + "----");
        for (OrgComponent orgComponent : list){
            orgComponent.print();
        }
    }
}
public class Department extends OrgComponent {

    public Department(String name, String desc) {
        super(name, desc);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDesc() {
        return super.getDesc();
    }

    @Override
    protected void print() {
        System.out.println(getName());
    }
}
public class Client {

    public static void main(String[] args) {
        University university = new University("清华大学", "北京");

        College computerCollege = new College("计算机学院","计算机");
        College infoCollege = new College("信息工程学院", "信息");

        computerCollege.add(new Department("软件工程","软件"));
        computerCollege.add(new Department("网络工程","网络"));

        infoCollege.add(new Department("通信工程","通信"));
        infoCollege.add(new Department("信息工程","信息"));

        university.add(computerCollege);
        university.add(infoCollege);

        university.print();
    }
}

   

  3. 组合模式在JDK集合的源码分析

  (1)hashMap就使用了组合模式,内部类Node就相当于叶子节点

 

标签:String,组合,void,模式,name,orgComponent,public,desc
From: https://www.cnblogs.com/homle/p/18148986

相关文章

  • Redis介绍、使用、数据结构和集群模式总结
    Redis(RemoteDictionaryServer)是一个开源的,基于内存的数据结构存储系统,它支持多种数据结构,如字符串(String)、列表(List)、集合(Set)、有序集合(SortedSet)、散列(Hash)等。Redis不仅可以用作数据库、缓存和消息代理,还可以通过复制、持久化、高可用性和分区提供强大的数据保障。以下是关于......
  • Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算
    Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算1.定义请求和返回对象的上下文对象packagecom.example.core.mydemo.java.filter;importjava.time.LocalDateTime;publicclassOrderReqContext{/***租客会员号*/StringmemNo;......
  • 组合恒等式
    最基础的就不说了1\[\sum_{i=0}^n(C_n^i)^2=C_{2n}^n\]证明:\(\sum_{i=0}^n(C_n^i)^2=\sum_{i=0}^nC_n^i\cdotC_n^i=\sum_{i=0}^nC_n^i\cdotC_n^{n-i}=C_{2n}^n\)2\[\sum_{i=0}^n(-1)^iC_n^i=[n=0]\]证明:由二项式定理,\(((-1)+1)^n=\sum_{i=0}^nC_n^i\cdot1^{n-i}\c......
  • switch 表达式 - 使用 switch 关键字的模式匹配表达式
    switch表达式-使用 switch 关键字的模式匹配表达式项目2023/05/106个参与者反馈 本文内容Caseguard非详尽的switch表达式C#语言规范另请参阅可以使用 switch 表达式,根据与输入表达式匹配的模式,对候选表达式列表中的单个表达式进行求值。有关在语......
  • 重复组合理论与公式
    从n个球当中,取出k个球,k个球允许重复出现,问有几种可能。解答:假设现在有编号的n个球,每一个编号的球有个,那么会有等式:,现在问题就转化为该等式一共有多少解?这里使用间隔法,即使用(n-1)个分隔符分隔得到n个空间,使得每一个空间之和为k.假设这里一共有5个球,取3次,那么需要4个分隔符去......
  • HarmonyOS NEXT应用开发之深色模式适配
    介绍本示例介绍在开发应用以适应深色模式时,对于深色和浅色模式的适配方案,采取了多种策略如下:固定属性适配:对于部分组件的颜色属性,如背景色或字体颜色,若保持不变,可直接设定固定色值或引用固定的资源文件。双资源目录适配:在resources目录下新增dark子目录,用于存放深色模式下的特......
  • 工程中实践的微服务设计模式
    最近在读《微服务架构设计模式》,开始的时候我非常的好奇,因为在我印象中,设计模式是常说的那23种设计模式,而微服务的设计模式又是什么呢?这个问题也留给大家,在文末我会附上我对这个问题的理解。本次文章的内容主要是工作中对微服务设计模式的应用,希望能对大家有所启发。事务发件箱......
  • 前端如何使用Javascript实现一个简单的发布订阅模式
    在前端开发中,我们经常需要处理事件的订阅与发布,以实现组件之间的解耦和通信。本文将介绍如何使用JavaScript实现一个简单的发布订阅模式,通过分步写代码的方式,带领读者一步步完成实现过程。步骤一:定义EventEmitter类首先,我们需要定义一个名为EventEmitter的类,作为发布订阅......
  • Codes 重新定义 SaaS 模式的研发项目管理平台开源版 4.5.3 发布
    一:简介   Codes重新定义SaaS模式= 云端认证+程序及数据本地安装+不限功能+30人免费    Codes 是一个 高效、简洁、轻量的一站式研发项目管理平台。包含需求管理,任务管理,测试管理,缺陷管理,自动化测试,cicd 等功能;Codes帮助企业加速融合研发、测试、运......
  • java动态代理模式
    Java动态代理模式是Java编程语言中的一种设计模式,它提供了一种在运行时动态创建代理对象的方式。这个模式主要用于实现AOP(面向切面编程)的概念,允许开发者在不修改原有业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理、权限验证等。在Java中,动态代理模式主要依赖于java.l......