zoukankan      html  css  js  c++  java
  • 【设计模式】-结构型-7-组合模式

    主要角色

    1. 抽象构件(Component)角色:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。在透明式的组合模式中抽象构件还声明访问和管理子类的接口;在安全式的组合模式中不声明访问和管理子类的接口,管理工作由树枝构件完成。
    2. 树叶构件(Leaf)角色:是组合中的叶节点对象,它没有子节点,用于实现抽象构件角色中 声明的公共接口。
    3. 树枝构件(Composite)角色:是组合中的分支节点对象,它有子节点。它实现了抽象构件角色中声明的接口,它的主要作用是存储和管理子部件,通常包含 Add()、Remove()、GetChild() 等方法。

    代码示例

    package composite;
    import java.util.ArrayList;
    public class CompositePattern
    {
        public static void main(String[] args)
        {
            Component c0=new Composite(); 
            Component c1=new Composite(); 
            Component leaf1=new Leaf("1"); 
            Component leaf2=new Leaf("2"); 
            Component leaf3=new Leaf("3");          
            c0.add(leaf1); 
            c0.add(c1);
            c1.add(leaf2); 
            c1.add(leaf3);          
            c0.operation(); 
        }
    }
    //抽象构件
    interface Component
    {
        public void add(Component c);
        public void remove(Component c);
        public Component getChild(int i);
        public void operation();
    }
    //树叶构件
    class Leaf implements Component
    {
        private String name;
        public Leaf(String name)
        {
            this.name=name;
        }
        public void add(Component c){ }           
        public void remove(Component c){ }   
        public Component getChild(int i)
        {
            return null;
        }   
        public void operation()
        {
            System.out.println("树叶"+name+":被访问!"); 
        }
    }
    //树枝构件
    class Composite implements Component
    {
        private ArrayList<Component> children=new ArrayList<Component>();   
        public void add(Component c)
        {
            children.add(c);
        }   
        public void remove(Component c)
        {
            children.remove(c);
        }   
        public Component getChild(int i)
        {
            return children.get(i);
        }   
        public void operation()
        {
            for(Object obj:children)
            {
                ((Component)obj).operation();
            }
        }    
    }
    

    扩展阅读

    思路来源:

    1. 在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。
    2. 在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。
  • 相关阅读:
    抽象工厂模式
    工厂模式
    简单工厂模式
    查询功能测试的测试点汇总
    网卡设置 网卡的高级设置说明
    30道python真实面试题(搜集到的,看看其实都是基础)
    测试用例设计方法--正交试验法
    小游戏:乌龟吃鱼
    Tkinter 的三大布局管理器 pack、grid 和 place用法汇总
    Python中输出字体的颜色设置
  • 原文地址:https://www.cnblogs.com/tuofan/p/12336167.html
Copyright © 2011-2022 走看看