设计模式-9-组合

说明

所有组件继承抽象组件,并可在任何组件中组合该抽象组件,使之具有全部组件遍历的能力,并可任意的增加组件,且每个组件可以完全不同.

public abstract class AbsComponent
    {
        public string name { get; set; }
        public AbsComponent(string _name)
        {
            name = _name;
        }
         public abstract void Exc(int depth);
    }
public class ComponentA : AbsComponent
    {
        public ComponentA(string _name) : base(_name)
        {
            lComponent = new List<AbsComponent>();
        }

        public List<AbsComponent> lComponent { get; set; }
        public override void Exc(int depth)
        {
            Console.WriteLine(new String(‘-‘, depth) + name);

            foreach (var component in lComponent)
                component.Exc(depth + 2);
        }
    }
public class ComponentB : AbsComponent
    {
        public ComponentB(string _name) : base(_name)
        {
        }

        public override void Exc(int depth)
        {
            Console.WriteLine(new String(‘-‘, depth) + name);
        }
    }
var root = new ComponentA("root");
            root.lComponent.Add(new ComponentB("Leaf A"));
            root.lComponent.Add(new ComponentB("Leaf B"));
            ComponentA comp = new ComponentA("Composite X");

            comp.lComponent.Add(new ComponentB("Leaf XA"));
            comp.lComponent.Add(new ComponentB("Leaf XB"));
            root.lComponent.Add(comp);

            root.lComponent.Add(new ComponentB("Leaf C"));

            // Add and remove a leaf
            var l = new ComponentB("Leaf D");
            root.lComponent.Add(l);
            root.lComponent.Remove(l);

            // Recursively display nodes
            root.Exc(1);
时间: 2024-08-11 01:35:15

设计模式-9-组合的相关文章

设计模式之组合模式

当需求中是体现部分与整体层次的结构时,以及你希望忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑使用组合模式了.例如:我们单个复制一个文件和多个复制文件,对我们而言,并不在乎一个文件的复制与多个文件复制的区别,也就是我们的操作是一样的. 下面的代码是建立一个公司的组织结构,其中各个部分,不管是分公司还是部门,都拥有一套相同的功能操作. 代码如下: using System; using System.Collections.Generic; using System.L

理解设计模式(组合)

组合模式,保证系统中相同类的组合对象和单一对象是一致的. 特定环境 若干对象树形架构,具有**整体——部分”层次结构 其中,操作任意若干对象的组合结构,如同操作单个对象 一类问题 整理和部分如何被一致的对待 解决方案 组合模式有3个角色: 组件接口 Component :规范类行为,一般增删叶节点或组合节点,由接口或抽象类实现 叶节点 Leaf :增删对该角色无效,实现Componet, 一般有具体子类实现 组合节点 Composite :封装叶节点引用集,实现增删逻辑,实现Componet,

设计模式 之 组合

组合模式(Composite) 将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 在我们提高班,有这样的一个组织,它不属于具体的哪一期,只属于整个提高班,那就是我们的机房管理委员会.无可厚非的是不管是哪个部门,大Boss都是我们尊敬的米老师.在这里我只表现出了我们每一期的分工结构.在机房管理委员会中,总负责人为九期-许恕,下面是十期总负责人-罗智福,然后下面是十期的四个部门负责人:网络部门:屈文哲:网线-交换机部门:孙一清和我:

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

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

设计模式之组合模式(Composite)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式之组合模式(Composite)

1.定义 组合模式(Composite Pattern)也叫合成模式,将对象组合成树形结构以表示"整体-部分"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 2.通用类图 Component抽象构件角色:定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性. Leaf叶子构件:叶子对象,其下再也没有其他的分支,也就是遍历的最小单位. Composite树枝构件:树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构. 3.通用源代码 package Compo

c++设计模式15 --组合模式

今天研究了一下设计模式15 组合模式 本人是菜鸟一枚,所以一开始完全不懂组合究竟是什么意思.先上图一张,树形结构图: 文档说,如果想做出这样的结构,通常考虑组合模式.那是为什么呢?现在让我们看一下组合模式的类图一本结构 想了很久,结合源代码,才搞明白,其实这个组合,意思就是说,如果我们要做这种树状结果,比如公司想让我们吧所有部门人员的 姓名,职位,薪水遍历出来,这个时候怎么办呢?那我们看树状机构图,有叶子结点和枝干结点,2种,但是2种有共性,那就是每个结点都有姓名,职位,薪水.所有叶子结点和枝干

C#设计模式:组合模式(Composite Pattern)

一,C#设计模式:组合模式(Composite Pattern) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _9.组合模式 { //组合模式主要用来处理一类具有"容器特征"的对象--即它们在充当对象的同时,又可以作为容器包含其他多个对象. //组合模式,将对象组合成树形结构以表示

C#设计模式(10)——组合模式(Composite Pattern)

一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象在功能上区别,导致在操作过程中必须区分简单对象和复合对象,这样就会导致客户调用带来不必要的麻烦,然而作为客户,它们希望能够始终一致地对待简单对象和复合对象.然而组合模式就是解决这样的问题.下面让我们看看组合模式是怎样解决这个问题的. 二.组合模式的详细介绍 2.1 组合模式的定义 组合模式

每天一个设计模式之组合模式

作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) 原文地址是:<每天一个设计模式之组合模式> 欢迎关注个人技术博客:godbmw.com.每周 1 篇原创技术分享!开源教程(webpack.设计模式).面试刷题(偏前端).知识整理(每周零碎),欢迎长期关注! 如果您也想进行知识整理 + 搭建功能完善/设计简约/快速启动的个人博客,请直接戳the