zoukankan      html  css  js  c++  java
  • 设计模式学习笔记二十四:优雅的菜单

    介绍

    组合(COMPOSITE)模式 属于对象结构型模式。将对象组合成树结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。(摘自《GoF设计模式》)

    个人见解

    我能想到的就是树形菜单的应用,层次关系,只有树形了。。。

    UML结构图

    COMPOSITE

    场景模拟

    菜单结构的一种优雅设计

    代码实现

    1.统一组件访问接口,即Component:

    public interface Component {
        public void add(Component component);
        public void remove(Component component);
        public void read();
    }
    
    

    2.单个组件的实现,即Leaf:

    public class SingleComponent implements Component{
        private String level;
        public SingleComponent(String level) {
            this.level = level;
        }
    
        @Override
        public void add(Component component) {
            throw new UnsupportedOperationException("Not yet allowed...");
        }
    
        @Override
        public void remove(Component component) {
            throw new UnsupportedOperationException("Not yet allowed...");
        }
    
        @Override
        public void read() {
            System.out.println(level);
        }
    }
    
    

    3.组合类组件实现,即Composite:

    public class CompositeComponent implements Component{
    
        private Set<Component> menus = new HashSet<Component>();
    
        @Override
        public void add(Component component) {
            menus.add(component);
        }
    
        @Override
        public void remove(Component component) {
            menus.remove(component);
        }
    
        @Override
        public void read() {
            for (Component menu : menus) {
                menu.read();
            }
        }
    }
    

    4.调用,即Client:

    public class Run {
        public static void main(String[] args) {
            // 来个根节点,传说中的组合类
            Component root = new CompositeComponent();
    
            // 子节点,传说中的单个组件
            Component sub_1 = new SingleComponent("sub_1");
            Component sub_2 = new SingleComponent("sub_2");
            Component sub_3 = new SingleComponent("sub_3");
    
            Component sub_4 = new CompositeComponent();
            Component sub_4_1 = new SingleComponent("sub_4_1");
            Component sub_4_2 = new SingleComponent("sub_4_2");
    
            // 添加子节点的子节点菜单
            sub_4.add(sub_4_1);
            sub_4.add(sub_4_2);
    
            // 为根节点添加子节点
            root.add(sub_1);
            root.add(sub_2);
            root.add(sub_3);
            root.add(sub_4);
    
            // 读取节点
            root.read();
        }
    }
    
  • 相关阅读:
    错误 1 类,结构或接口成员声明中的标记"="无效
    转asp.net中的App_GlobalResources和App_LocalResources使用
    input type=file 上传文件样式美化(转载)
    Postman Post请求上传文件
    vuex 、store、state (转载)
    ES5、ES2015、ECMAScript6(转载)
    axios 用法简介(转载)
    js中const,var,let区别(转载)
    C#开发微信公众平台-就这么简单(附Demo)转载
    什么是 Native、Web App、Hybrid、React Native 和 Weex?(转载)
  • 原文地址:https://www.cnblogs.com/liushijie/p/4808972.html
Copyright © 2011-2022 走看看