概念

  • 把一组相似的对象当作一个单一的对象。如:树形菜单
  • image.png
  1. /**
  2. * 使用组合模式,组织层级结构的数据
  3. */
  4. @Data
  5. public class Menu {
  6. private Integer id;
  7. private String name;
  8. public Menu(Integer id,String name){
  9. this.id = id;
  10. this.name = name;
  11. }
  12. //组合模式关注点
  13. private List<Menu> childs = new ArrayList<>();
  14. //提供添加层级的方法
  15. void addChildMenu(Menu menu){
  16. childs.add(menu);
  17. }
  18. //层级遍历方法
  19. void printMenu(){
  20. System.out.println(name);
  21. if(childs.size() > 0){
  22. for (Menu child : childs) {
  23. child.printMenu();
  24. }
  25. }
  26. }
  27. }
  1. public class MainTest {
  2. public static void main(String[] args) {
  3. Menu root = new Menu(1, "系统管理");
  4. Menu 角色管理 = new Menu(2, "角色管理");
  5. root.addChildMenu(角色管理);
  6. 角色管理.addChildMenu(new Menu(6,"固定角色"));
  7. 角色管理.addChildMenu(new Menu(7,"临时授予"));
  8. Menu 用户管理 = new Menu(3, "用户管理");
  9. root.addChildMenu(用户管理);
  10. 用户管理.addChildMenu(new Menu(4,"临时用户"));
  11. 用户管理.addChildMenu(new Menu(5,"注册用户"));
  12. //按照不同层级展示
  13. root.printMenu();
  14. }
  15. }

应用场景

  • 层级结构
  • 部门组织结构
  • 组合了别的对象还是组合模式吗?