java组合模式

简介: 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。工作中常用的就是树形结构,菜单结构

java组合模式


前言

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。
工作中常用的就是树形结构,菜单结构


1,故事

一个后台管理系统中,必然存在很个菜单,每个一级菜单下有各自的二级菜单,二级菜单下甚至还有三级菜单。这样的层级结构,可以用组合模式实现。

2,使用

创建 菜单类(menu)

@Data
public class Menu {
    //菜单名称
    private String name;
    //下级子菜单
    private List<Menu> menus = new ArrayList<>();

    public Menu(String name) {
        this.name = name;
    }
    //新增子菜单
    public void add(Menu menu){
        this.menus.add(menu);
    }
    //移除子菜单
    public void remove(Menu menu){
        this.menus.remove(menu);
    }

}

测试

//打印出整个菜单以及子菜单
    public static void main(String[] args) {
        Menu allMenu = new Menu("菜单");

        Menu firstMenu = new Menu("1菜单");
        //给菜单1 添加子菜单
        firstMenu.add(new Menu("1.1菜单"));
        firstMenu.add(new Menu("1.2菜单"));
        firstMenu.add(new Menu("1.3菜单"));

        Menu secondMenu = new Menu("2菜单");
        //给菜单2 添加子菜单
        secondMenu.add(new Menu("2.1菜单"));
        secondMenu.add(new Menu("2.2菜单"));

        Menu menu = new Menu("2.3菜单");
        //给菜单2.3 添加3级子菜单
        menu.add(new Menu("2.3.1菜单"));
        menu.add(new Menu("2.3.2菜单"));
        menu.add(new Menu("2.3.3菜单"));
        secondMenu.add(menu);
        //加入到主菜单中
        allMenu.add(firstMenu);
        allMenu.add(secondMenu);
        //打印
        print(allMenu);
    }
    //打印菜单
    private static void print(Menu menu){
        System.out.println(menu.getName());
        List<Menu> menus = menu.getMenus();
        if(!CollectionUtils.isEmpty(menus)){
            for (Menu mu : menus) {
                print(mu);
            }
        }
    }

输出结果

菜单
1菜单
1.1菜单
1.2菜单
1.3菜单
2菜单
2.1菜单
2.2菜单
2.3菜单
2.3.1菜单
2.3.2菜单
2.3.3菜单

总结

组合模式是最常用的模式之一

优点:

1、高层模块调用简单。
2、节点自由增加。

缺点:

在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

使用场景:

部分、整体场景,如树形菜单,文件、文件夹的管理。
目录
相关文章
|
2天前
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
Java设计模式:组合模式的介绍及代码演示
|
3月前
|
设计模式 存储 安全
Java设计模式:组合模式之透明与安全的两种实现(七)
Java设计模式:组合模式之透明与安全的两种实现(七)
|
3月前
|
设计模式 Java
Java设计模式之组合模式详解
Java设计模式之组合模式详解
|
4月前
|
设计模式 Java
Java设计模式【九】:组合模式
Java设计模式【九】:组合模式
45 0
|
4月前
|
设计模式 安全 Java
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
|
4月前
|
设计模式 存储 Java
23种设计模式,组合模式的概念优缺点以及JAVA代码举例
【4月更文挑战第5天】组合模式(Composite Pattern)是一种结构型设计模式,旨在通过将对象组合成树形结构以表示部分-整体的层次结构,使用户对单个对象和组合对象的使用具有一致性。这种模式让客户可以统一地处理单个对象和组合对象
68 6
|
4月前
|
设计模式 存储 安全
聊聊Java设计模式-组合模式
组合(Composite)模式,又叫做树形模式,主要用来处理树形结构数据。是将一组对象组织成树形结构,以表示一种“部分-整体”的层次结构。让客户端可以统一单个对象和组合对象的处理逻辑
51 1
聊聊Java设计模式-组合模式
|
设计模式 Java 容器
组合模式【Java设计模式】
组合模式【Java设计模式】
35 0
|
设计模式 Java
【设计模式】用Java实现组合模式
组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示"部分-整体"的层次结构。这种模式能够让客户端统一对待单个对象和组合对象,使得用户在使用对象时不需要关心对象是单个还是组合的。
117 0
|
4月前
|
设计模式 Rust Java
组合模式 rust和java的实现
组合模式 rust和java的实现
82 0