• 组合模式


    用于把一组相似的对象当作一个单一的对象

    涉及角色:
      1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component
    子部件。
      2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。
      3.Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除

    Node

    package design.pattern.component;
    
    public abstract class Node {
        private String name;
        
        public Node(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public abstract Node addNode(Node node) throws RuntimeException;
        
        public void print(int depth) {
            for (int i=0; i<depth; i++)
                System.out.print(" ");
            
            System.out.println(this.name);
            
            if (this instanceof Menu) {
                for (Node node : ((Menu)this).getMenu()) {
                    node.print(depth+1);
                }
            }
        }
    }

    Item

    package design.pattern.component;
    
    public class Item extends Node {
    
        public Item(String name) {
            super(name);
        }
    
        @Override
        public Node addNode(Node node) throws RuntimeException {
            throw new RuntimeException();
        }
    
    }

    Menu

    package design.pattern.component;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Menu extends Node {
        private List<Node> menu = new ArrayList<>();
        
        public Menu(String name) {
            super(name);
        }
    
        public List<Node> getMenu() {
            return menu;
        }
        @Override
        public Node addNode(Node node) throws RuntimeException {
            menu.add(node);
            return this;
        }
        
    }

    Client

    package design.pattern.component;
    
    public class Client {
        public static void main(String[] args) {
            Node menu = new Menu("1");
            menu.addNode(new Item("1.1"));
            menu.addNode(new Menu("1.2").addNode(new Item("1.2.1")));
            menu.addNode(new Item("1.3"));
            menu.print(0);
        }
    }
  • 相关阅读:
    第二章 用电信号传输TCP/IP数据协议栈和网卡
    skiplist.h/filter_policy.h/arena.h/coding.h分析
    slice.h/hash.h/chche.h分析
    comparator.c/log_read.h/block.h/table.h/table_cache.h分析
    sst文件结构/table_builder.h分析
    db_impl.cc Memtable落盘分析和SST文件合并
    postman连接mysql数据库
    postman连接mysql数据库
    MYSQL跨服务器数据表使用
    mysql拼接json数据
  • 原文地址:https://www.cnblogs.com/m2492565210/p/7461558.html
Copyright © 2020-2023  润新知