组合模式

Posted camcay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合模式相关的知识,希望对你有一定的参考价值。

定义:将对象组合成树形结构来表示“整体/部分”的层次机构。让客户以一致性的方式处理个别对象和组合对象。

类图:

技术图片

示例

package composite;

import java.util.List;

public class Menu {
    private String menuName;
    private List<Menu> childMenus;
    public Menu(String menuName,List<Menu> childMenus){
        this.menuName = menuName;
        this.childMenus = childMenus;
    }

    public String getMenuName() {
        return menuName;
    }

    public List<Menu> getChildMenus() {
        return childMenus;
    }

    @Override
    public String toString() {
        return "["+menuName+"]";
    }
}

package composite;

import java.util.ArrayList;
import java.util.List;

public class Client {
    public static void main(String[] args){
        //初始化模拟数据
        List<Menu> firstSubList = new ArrayList<>();
        List<Menu> secondSubList =new ArrayList<>();
        firstSubList.add(new Menu("二级菜单-无子菜单",null));
        firstSubList.add(new Menu("二级菜单-有子菜单",secondSubList));
        secondSubList.add(new Menu("三级子菜单1",null));
        secondSubList.add(new Menu("三级子菜单2",null));
        Menu menu = new Menu("主菜单",firstSubList);
        //客户打印菜单树
        printMenu(menu);
    }
    //递归打印菜单树
    public static void printMenu(Menu menu){
        System.out.println(menu);
        if(menu.getChildMenus()!=null&&menu.getChildMenus().size()>0){
            for(Menu subMenu:menu.getChildMenus()){
                printMenu(subMenu);
            }
        }
    }
}

 

运行结果

技术图片

 

 牺牲单一职责原则换取数据结构的透明性

 

以上是关于组合模式的主要内容,如果未能解决你的问题,请参考以下文章

如何组合绑定片段而不将它们包装在 XML 文字中

48个值得掌握的JavaScript代码片段(上)

Tailwind.css 体验总结

Tailwind.css 体验总结

用于从 cloudkit 检索单列的代码模式/片段

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)