设计模式——组合模式08

这篇具有很好参考价值的文章主要介绍了设计模式——组合模式08。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

组合模式:把类似对象或方法组合成结构为树状的设计思路。
例如部门之间的关系。
设计模式,一定要敲代码理解

设计模式——组合模式08,设计模式,设计模式,组合模式,java

抽象组件

/**
 * @author ggbond
 * @date 2024年04月06日 08:54
 * 部门有:二级部门(下面管三级部门) 三级部门 (无子部门)
 */
public abstract class Compound {
    private String name; // 部门

    public Compound(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public abstract void add(Compound component); // 添加子部门
    public abstract void remove(Compound component); // 删除子部门
    public abstract void select(int depth); // 查看全部子部门
}

叶子结点

/**
 * @author ggbond
 * @date 2024年04月06日 08:57
 * 叶子节点 三级部门
 */
public class Leaf extends Compound {
    public Leaf(String name) {
        super(name);
    }

    @Override
    public void add(Compound component) {
        System.out.println("不能加子部门");
    }

    @Override
    public void remove(Compound component) {
        System.out.println("无子部门,无删除权限");
    }

    @Override
    public void select(int depth) {
        //输出树形结构的叶子节点,这里直接输出设备名称
        for(int i = 0;  i < depth; i++) {
            System.out.print("*");
        }
        System.out.print(" ");
        System.out.println(getName());
    }
}

非叶子结点

/**
 * @author ggbond
 * @date 2024年04月06日 09:00
 */
public class Composite extends  Leaf{
    // 记录子部门信息
    private ArrayList<Compound> list = new ArrayList<>();

    public Composite(String name) {
        super(name);
    }

    @Override
    public void add(Compound component) {
        list.add(component);
    }

    @Override
    public void remove(Compound component) {
        list.remove(component);
    }

    @Override
    public void select(int depth) {

        for (int i = 0; i < depth; i++) {
            System.out.print("*");
        }
        System.out.print(" ");
        System.out.println(getName());
        // 递归
        for(Compound compound: list) {
            compound.select(depth + 1);
        }
    }
}

测试结果


/**
 * @author ggbond
 * @date 2024年04月06日 09:04
 */
public class Main {
    public static void main(String[] args) {
        Composite root=new Composite("一级部门1");
        //二级部门1
        Composite r21=new Composite("二级部门1");
        r21.add(new Composite("三级部门1"));
        r21.add(new Composite("三级部门2"));
        r21.add(new Composite("三级部门3"));
        //二级部门2
        Composite r22=new Composite("二级部门2");
        r22.add(new Composite("三级部门4"));
        r22.add(new Composite("三级部门5"));
        r22.add(new Composite("三级部门6"));
        //二级部门3
        Composite r23=new Composite("二级部门3");

        root.add(r21); root.add(r22); root.add(r23);
        root.select(1);
    }
}

* 一级部门1
 ** 二级部门1
  *** 三级部门1
  *** 三级部门2
  *** 三级部门3
 ** 二级部门2
  *** 三级部门4
  *** 三级部门5
  *** 三级部门6
 ** 二级部门3

总结

满足开闭原则。叶子结点与非叶子结点都继承或实现同一抽象,只是叶子功能权限少,而非叶子结点需要容器记录子节点。

代码下载

代码下载文章来源地址https://www.toymoban.com/news/detail-847925.html

到了这里,关于设计模式——组合模式08的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Java极简设计模式》第08章:外观模式(Facade)

    作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/java-simple-design-facade 沉淀,成长,突破,帮助他人,成就自我。 本章难度:★★☆☆☆ 本章重点:用最

    2024年02月07日
    浏览(43)
  • Java23种设计模式-结构型模式之组合模式

    组合模式 (Composite Pattern):将 对象组合成树状结构 以表示“ 部分-整体 ”层次结构,同时保持对单个对象和组合对象的一致性操作,主要目的是简化客户端代码,因为它可以统一处理单个对象和组合对象。 通常包含以下几个角色: 角色1. 抽象组件 (Component):声明了 组

    2024年04月26日
    浏览(40)
  • Java设计模式之结构型-组合模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 4.1、基本实现 4.2、菜单遍历  五、总结  组合模式(Composite Pattern)又叫部分-整体模式,它通过将对象组合成树形结构来表示“整体-部分”的层次关系,允许用户统一单个对象和组合对象的处理逻辑。 角色 描述

    2024年02月16日
    浏览(50)
  • 【设计模式——学习笔记】23种设计模式——组合模式Composite(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    编写程序展示一个学校院系结构: 需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系 【传统方式】 将学院看做是学校的子类,系是学院的子类,小的组织继承大的组织 分析: 在一个页面中展示出学校的院系组成,一个学校有多个

    2024年02月15日
    浏览(40)
  • 【Java面试题】设计模式之七种结构性模式——代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式

    目录 一、代理模式 二、适配器模式 三、桥接模式 四、装饰模式 五、外观模式 六、享元模式 七、组合模式 概念: 代理模式是为其他对象提供一种以代理控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对

    2023年04月09日
    浏览(50)
  • 【设计模式-08】Flyweight享元模式

    简要的理解:享元模式就是新建一个池(Pool),该池子(Pool)中有新建好的一堆对象,当需要使用时,从池子(Pool)中直接获取,不用重新新建一个对象。通俗的讲就是: 共享元数据 。 比如Java中的String就是使用享元模式,String的值存储在一个内存池中,不用每次分配一个内存存储

    2024年01月21日
    浏览(43)
  • 设计模式——10. 组合模式

    组合模式是一种结构型设计模式,用于将对象组合成树状结构以表示“部分-整体”的层次结构。它允许客户端以一致的方式处理单个对象和组合对象(包含多个对象的容器),使得客户端无需关心它们之间的差异。 组合模式通常涉及两种主要角色: 叶子节点(Leaf):这是组

    2024年02月07日
    浏览(64)
  • 设计模式-组合模式

    组合模式可以使用一棵树来表示 组合模式使得用户可以使用一致的方法操作单个对象和组合对象 组合模式又叫部分整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构,可以更好的实现管理操作,部分-整体对象的操作基本一样,但是应该还会有不一样的地方

    2024年02月10日
    浏览(49)
  • 设计模式——组合模式

    组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。 组合模式将

    2024年02月11日
    浏览(64)
  • 设计模式:组合模式

    组合模式是一种结构型设计模式,用于将对象组织成树形结构,以表示“部分-整体”的层次结构。组合模式使得客户端可以统一地处理单个对象和组合对象,而不需要区分它们之间的差异。 在组合模式中,有两种主要类型的对象:叶节点和组合节点。叶节点表示树结构中的

    2024年02月07日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包