码迷,mamicode.com
首页 > 其他好文 > 详细

组合模式

时间:2020-02-26 18:45:39      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:getmenu   图片   透明   机构   code   mamicode   first   模拟   二级菜单   

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

类图:

技术图片

示例

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

 

运行结果

技术图片

 

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

 

组合模式

标签:getmenu   图片   透明   机构   code   mamicode   first   模拟   二级菜单   

原文地址:https://www.cnblogs.com/camcay/p/12368248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!