组合(Composite)模式 *

组合(Composite)模式:将对象组合树形结构以表示‘部分-整体’的层次结构。

组合模式使得用户对单个对象和组合对象具有一致性

/*
* 抽象构件(Component)角色:这是一个抽象角色,它给参与组合的对象规定一个接口。这个角色给出共有接口及其默认行为。
* 树叶构件(Leaf)角色:代表参加组合的树叶对象。一个树叶对象没有下级子对象。
* 树枝构件(Composite)角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
*/

基础代码:

     // 创建一个树结构
            Composite root = new Composite("root");
            root.Add(new Leaf("Leaf A"));
            root.Add(new Leaf("Leaf B"));
            Composite comp = new Composite("Composite X");

            comp.Add(new Leaf("Leaf XA"));
            comp.Add(new Leaf("Leaf XB"));
            root.Add(comp);
            Composite compss = new Composite("Composite Y");
            compss.Add(new Leaf("Leaf XXB"));
            comp.Add(compss);
            root.Add(new Leaf("Leaf C"));
            // 添加和删除叶子
            Leaf l = new Leaf("Leaf D");
            root.Add(l);
            root.Remove(l);

            // 递归地显示节点
            root.Display(1);

            Console.WriteLine("\n ============ \n");

    /// <summary>
    /// 抽象构件(Component)角色
    /// </summary>
    public abstract class Component
    {
        protected string name;
        // 构造函数
        public Component(string name)
        {
            this.name = name;
        }
        // 操作
        public abstract void Display(int depth);
    }

    //  树枝构件(Composite)角色
    public class Composite : Component
    {
        private ArrayList children = new ArrayList();
        //构造函数
        public Composite(string name) : base(name) { } 

        //方法
        public void Add(Component component)
        {
            children.Add(component);
        }
        public void Remove(Component component)
        {
            children.Remove(component);
        } 

        public override void Display(int depth)
        {
            Console.WriteLine(new String(‘-‘, depth) + name);
            // 显示每个节点的孩子
            foreach (Component component in children)
                component.Display(depth + 3);
        }
    }
    /// <summary>
    /// 树叶构件(Leaf)角色
    /// </summary>
    public class Leaf : Component
    {
        // 构造函数
        public Leaf(string name) : base(name) { }
        // 从写函数
        public override void Display(int depth)
        {
            Console.WriteLine(new String(‘-‘, depth) + name);
        }
    }

组合(Composite)模式 *

时间: 2024-08-29 22:42:46

组合(Composite)模式 *的相关文章

C++设计模式实现--组合(Composite)模式

一. 举例 这个例子是书上的,假设有一个公司的组结结构如下: 它的结构很像一棵树,其中人力资源部和财务部是没有子结点的,具体公司才有子结点. 而且最关健的是,它的每一层结构很相似. 代码实现如下: #include <iostream> #include <list> #include <string> using namespace std; //公司类,提供接口 class Company { public: Company(string name) { m_nam

Java 实现组合(Composite)模式

类图 /** * 树 整体 * * @author stone * */ public class Tree { private TreeNode root; //根节点 public Tree(String name) { this.root = new TreeNode(name); } public TreeNode getRoot() { return root; } } /** * 树节点 部份 * 也可以自身代表树:一堆节点组成了一颗树 * * @author stone * */

二十三种设计模式之:组合(Composite)模式(部分&#183;整体模式)

组合(Composite)模式又叫部分·整体模式,主要用于实现树形结构. 例子如下: public class TreeNode{ private TreeNode parent; private String name; private List<TreeNode> children = new Arraylist<TreeNode>(); public TreeNode(String name){ this.name = name; } public String getNam

Android与设计模式——组合(Composite)模式

定义(GoF<设计模式>):将对象组合成树形结构以表示"部分整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性.  涉及角色 1.Component:(View)是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为.声明一个接口用于访问和管理Component子部件. 2.Leaf:(TextView.自定义View)在组合中表示叶子结点对象,叶子结点没有子结点(即不能在View内再添加View). 3.Composite:(ViewGr

组合(composite)模式

定义 将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性 组合模式(Composite)将小对象组合成树形结构,使用户操作组合对象如同操作一个单个对象.组合模式定义了"部分-整体"的层次结构,基本对象可以被组合成更大的对象,而且这种操作是可重复的,不断重复下去就可以得到一个非常大的组合对象,但这些组合对象与基本对象拥有相同的接口,因而组合是透明的,用法完全一致. 代码: #include <iostream>

Java组合模式(Composite模式)

Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树形结构图.组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行.可以用牵一动百来形容. 所以Composite模式使用到Iterator模式,和Chain of Responsibilit

Composite模式 组合模式

Android的ViewGroup 和 View 的关系,即是采用组合模式 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面. 例子1:就是多级树形菜单. 例子2:文件和文件夹目录 2.问题 我们可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象.我们可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象.客户端代码必须区别对象简单对象和容器对象,而实际上大多数情况下用户认为它们是一样的.对这些类区别使用,使得程序更加复杂.递归使用

Composite模式(组合设计模式)

Composite 设计模式? 在计算机的文件系统中,有"文件夹"的概念(在有些操作系统(Linux操作系统)中,也称为"目录").文件夹里面既可以放入文件,也可以放入其他文件夹(子文件夹).在子文件夹中,一样地既可以放入文件,也可以放入子文件夹.可以说,文件夹是形成了一种容器结构.递归结构. 结构模式:能够使容器与内容具有一致性,创造出递归结构的模式就是Composite模式. 关注点:使用Composite模式可以使容器与内容具有一致性,也可以称其为多个和单个的

PHP设计模式——组合器模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 组合模式(有时候又叫做部分-整体模式),将对象组合成树形结构以表示"部分整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性.它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦. 实现类图: 三大角色: 抽象结构(Company)角色:此角色实现所有类共有接口的默认行为,声明一个接口管理子部件. 叶子节点(Te

【设计模式】组合实体模式

组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中.一个组合实体是一个 EJB 实体 bean,代表了对象的图解.当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的.以下是组合实体 bean 的参与者. 组合实体(Composite Entity) - 它是主要的实体 bean.它可以是粗粒的,或者可以包含一个粗粒度对象,用于持续生命周期. 粗粒度对象(Coarse-Grained Object) -