组合模式

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

类图:

示例

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);
            }
        }
    }
}

 

运行结果

 

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

 

posted @ 2020-02-26 18:04  Camcay  阅读(188)  评论(0)    收藏  举报