zoukankan      html  css  js  c++  java
  • 设计模式之组合模式

    参考博文:https://www.cnblogs.com/jingmoxukong/p/4221087.html 侵权删除

    2019-06-25  13:36:54

    组合模式  Component

    什么是组合模式:将对象组合成“树形”结构以表示“部分-整体”的层次结构。使得客户对单个对象或组合对象的使用具有一致性

    适用性:需要对单个对象和对象组合提供一致性的操作。

    组合模式成员:

      Component:组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理 Component 的子部件。

      Composite:定义枝节点行为,用来存储子部件,在 Component 接口中实现与子部件相关的操作。例如 Add 和 Remove。

      leaf:表示叶节点对象,叶子节点没有子节点()。

    组合模式代码思考:

      需要对叶子节点和枝节点提供统一性的操作,故将叶子节点和枝节点抽象提供统一的接口。

      枝节点中的operation()方法:

        for(Component c : components){
            c.operation();
        }

      叶节点中的operation()方法:

        public void operation() {
            //相应操作
        }
    

    组合模式基本代码:

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 将对象和对象组合抽象
     */
    public interface Component {
        public void add(Component c);
        public void remove(Component c);
        public void operation();
    }
    
    /**
     * 枝节点
     * 对象组合,可以添加或删除对象
     * 
     */
    class Composite implements Component{
        private String name;
        private List<Component> components;
    
    
        //List集合表示子结点容器
        public Composite(String name) {
            components = new ArrayList<>();
            this.name = name;
        }
    
        @Override
        public void add(Component c) {
            components.add(c);
        }
    
        @Override
        public void remove(Component c) {
            components.remove(c);
        }
    
        @Override
        public void operation() {
            for(Component c : components){
                c.operation();
            }
        }
    }
    
    /**
     * 叶子节点
     * 不能有添加节点或删除节点
     */
    class Leaf implements Component{
        private String name;
    
        public Leaf(String name) {
            this.name = name;
        }
    
        @Override
        public void operation() {
            System.out.println("leaf operation   " + name);
        }
    
        @Override
        public void add(Component c) {}
    
        @Override
        public void remove(Component c) {}
    }
    
    /**
     * 客户端
     * 测试代码
     *
     */
    class Client{
        public static void main(String[] args) {
            Component root = new Composite("root");
            Component node1 = new Composite("node1");
            Component leaf1 = new Leaf("leaf1");
            Component leaf21 = new Leaf("leaf21");
            Component leaf22 = new Leaf("leaf22");
    
            root.add(node1);
            root.add(leaf1);
            node1.add(leaf21);
            node1.add(leaf22);
    
            root.operation();
            node1.operation();
            leaf1.operation();
        }
    }
    
        /*
        输出结果:
        leaf operation   leaf21
        leaf operation   leaf22
        leaf operation   leaf1
        leaf operation   leaf21
        leaf operation   leaf22
        leaf operation   leaf1
         */
  • 相关阅读:
    《你说对就队》第四次作业:项目需求调研与分析
    《你说对就对队》第三次作业:团队项目的原型设计
    《你说对就队》第二次作业:团队项目选题报告
    《你说对就队》第一次作业 团队亮相
    实验十一 团队作业7:团队项目设计完善&编码1
    《你们都是魔鬼吗 团队》 第六次作业 团队项目系统设计改进与详细设计
    团队项目改进
    《你们都是魔鬼吗团队》第四次作业:项目需求调研与分析
    《你们都是魔鬼吗团队》第三次作业:团队项目的原型设计
    <你们都是魔鬼吗>第二次团队作业:团队项目选题
  • 原文地址:https://www.cnblogs.com/youzoulalala/p/11082515.html
Copyright © 2011-2022 走看看