Featured image of post Java设计模式-组合模式Composite

Java设计模式-组合模式Composite

相关文章

【合集】Java设计模式

抽象根节点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
public static abstract class MenuComponent {
    @Getter
    protected String name;
    protected int level;
    /*
        将抽象方法声明在抽象类中属于透明组合模式(组合模式的标准形式),如果放在子类中属于不透明组合模式,父子类需要区别对待,不能针对抽象编程
     */
    public void add(MenuComponent menuComponent) {
        throw new UnsupportedOperationException();
    }
    public void remove(MenuComponent menuComponent) {
        throw new UnsupportedOperationException();
    }
    public MenuComponent getChild(int index) {
        throw new UnsupportedOperationException();
    }
    public abstract void print();
}

树枝节点:继承并聚合了抽象根节点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public static class Menu extends MenuComponent {
    private final List<MenuComponent> menuComponentList = new ArrayList<>();
    public Menu(String name, int level) {
        this.name = name;
        this.level = level;
    }
    @Override
    public void add(MenuComponent menuComponent) {
        menuComponentList.add(menuComponent);
    }
    @Override
    public void remove(MenuComponent menuComponent) {
        menuComponentList.remove(menuComponent);
    }
    @Override
    public MenuComponent getChild(int index) {
        return menuComponentList.get(index);
    }
    @Override
    public void print() {
        for (int i = 0; i < level; i++) {
            System.out.print("--");
        }
        System.out.println(name);
        for (MenuComponent component : menuComponentList) {
            component.print();
        }
    }
}

叶子节点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
public static class MenuItem extends MenuComponent {
    public MenuItem(String name, int level) {
        this.name = name;
        this.level = level;
    }
    public void print() {
        for (int i = 0; i < level; i++) {
            System.out.print("--");
        }
        System.out.println(name);
    }
}

客户端调用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
MenuComponent component = new Menu("系统管理", 1);

MenuComponent menu1 = new Menu("菜单管理", 2);
menu1.add(new MenuItem("页面访问", 3));
menu1.add(new MenuItem("展开菜单", 3));
menu1.add(new MenuItem("编辑菜单", 3));
menu1.add(new MenuItem("删除菜单", 3));
menu1.add(new MenuItem("新增菜单", 3));
component.add(menu1);

MenuComponent menu2 = new Menu("权限管理", 2);
menu2.add(new MenuItem("页面访问", 3));
menu2.add(new MenuItem("提交保存", 3));
component.add(menu2);

MenuComponent menu3 = new Menu("角色管理", 2);
menu3.add(new MenuItem("页面访问", 3));
menu3.add(new MenuItem("新增角色", 3));
menu3.add(new MenuItem("修改角色", 3));
component.add(menu3);

component.print();

输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--系统管理
----菜单管理
------页面访问
------展开菜单
------编辑菜单
------删除菜单
------新增菜单
----权限管理
------页面访问
------提交保存
----角色管理
------页面访问
------新增角色
------修改角色
皖ICP备2024056275号-1
发表了78篇文章 · 总计149.56k字
本站已稳定运行