原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern)

[索引页][源码下载]

乐在其中设计模式(C#) - 组合模式(Composite Pattern)

作者:webabcd





介绍

将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。





示例

有一个Message实体类,使其单个对象和复合对象具有一致性。







MessageModel

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Composite

{

    /**//// <summary>

    /// Message实体类

    /// </summary>

    public class MessageModel

    {

        /**//// <summary>

        /// 构造函数

        /// </summary>

        /// <param name="msg">Message内容</param>

        /// <param name="pt">Message发布时间</param>

        public MessageModel(string msg, DateTime pt)

        {

            this._message = msg;

            this._publishTime = pt;

        }



        private string _message;

        /**//// <summary>

        /// Message内容

        /// </summary>

        public string Message

        {

            get { return _message; }

            set { _message = value; }

        }



        private DateTime _publishTime;

        /**//// <summary>

        /// Message发布时间

        /// </summary>

        public DateTime PublishTime

        {

            get { return _publishTime; }

            set { _publishTime = value; }

        }

    }

}

MessageModelComponent

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Composite

{

    /**//// <summary>

    /// 抽象Message实体构件(Component)

    /// </summary>

    public abstract class MessageModelComponent

    {

        /**//// <summary>

        /// Message实体对象

        /// </summary>

        protected MessageModel _messageModel;



        /**//// <summary>

        /// 名称

        /// </summary>

        protected string _name;



        /**//// <summary>

        /// 构造函数

        /// </summary>

        /// <param name="name">名称</param>

        /// <param name="mm">Message实体对象</param>

        public MessageModelComponent(string name, MessageModel mm)

        {

            this._name = name;

            this._messageModel = mm;

        }



        /**//// <summary>

        /// 构造函数

        /// </summary>

        /// <param name="name">名称</param>

        public MessageModelComponent(string name)

        {

            this._name = name;

        }



        /**//// <summary>

        /// 添加

        /// </summary>

        /// <param name="mmc">MessageModelComponent</param>

        public abstract void Add(MessageModelComponent mmc);



        /**//// <summary>

        /// 删除

        /// </summary>

        /// <param name="mmc">MessageModelComponent</param>

        public abstract void Remove(MessageModelComponent mmc);



        /**//// <summary>

        /// 获取

        /// </summary>

        /// <param name="indent">缩进数</param>

        /// <returns></returns>

        public abstract string GetData(int indent);

    }

}

MessageModelLeaf

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Composite

{

    /**//// <summary>

    /// Message实体树叶(Leaf)

    /// </summary>

    public class MessageModelLeaf : MessageModelComponent

    {

        /**//// <summary>

        /// 构造函数

        /// </summary>

        /// <param name="name">名称</param>

        /// <param name="mm">Message实体对象</param>

        public MessageModelLeaf(string name, MessageModel mm)

            : base(name, mm)

        {

            

        }



        /**//// <summary>

        /// 添加

        /// </summary>

        /// <param name="mmc">MessageModelComponent</param>

        public override void Add(MessageModelComponent mmc)

        {

            throw new Exception("不能添加");

        }



        /**//// <summary>

        /// 删除

        /// </summary>

        /// <param name="mmc">MessageModelComponent</param>

        public override void Remove(MessageModelComponent mmc)

        {

            throw new Exception("不能删除");

        }



        /**//// <summary>

        /// 获取

        /// </summary>

        /// <param name="indent">缩进数</param>

        /// <returns></returns>

        public override string GetData(int indent)

        {

            return new String('—', indent) + 

                "树叶名称:" + _name + 

                ";信息内容:" + _messageModel.Message + 

                "<br />";

        }

    }

}

MessageModelComposite

using System;

using System.Collections.Generic;

using System.Text;



namespace Pattern.Composite

{

    /**//// <summary>

    /// Message实体树枝(Composite)

    /// </summary>

    public class MessageModelComposite : MessageModelComponent

    {

        private List<MessageModelComponent> _list;



        /**//// <summary>

        /// 构造函数

        /// </summary>

        /// <param name="name">名称</param>

        public MessageModelComposite(string name)

            : base(name)

        {

            _list = new List<MessageModelComponent>();

        }



        /**//// <summary>

        /// 添加

        /// </summary>

        /// <param name="mmc">MessageModelComponent</param>

        public override void Add(MessageModelComponent mmc)

        {

            _list.Add(mmc);

        }



        /**//// <summary>

        /// 删除

        /// </summary>

        /// <param name="mmc">MessageModelComponent</param>

        public override void Remove(MessageModelComponent mmc)

        {

            _list.Remove(mmc);

        }



        /**//// <summary>

        /// 获取

        /// </summary>

        /// <param name="indent">缩进数</param>

        /// <returns></returns>

        public override string GetData(int indent)

        {

            string s = new String('—', indent) + 

                "树枝名称:" + _name + 

                "<br />";



            foreach (MessageModelComponent mmc in _list)

            {

                s );

            }



            return s;

        }

    }

}

Test

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;



using Pattern.Composite;



public partial class Composite : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        MessageModelComposite root = new MessageModelComposite("树枝A");



        root.Add(new MessageModelLeaf("树叶A", new MessageModel("Message内容A", DateTime.Now)));

        root.Add(new MessageModelLeaf("树叶B", new MessageModel("Message内容B", DateTime.Now)));



        MessageModelComposite comp = new MessageModelComposite("树枝B");



        comp.Add(new MessageModelLeaf("树叶C", new MessageModel("Message内容C", DateTime.Now)));

        comp.Add(new MessageModelLeaf("树叶D", new MessageModel("Message内容D", DateTime.Now)));



        root.Add(comp);



        root.Add(new MessageModelLeaf("树叶E", new MessageModel("Message内容E", DateTime.Now)));



        MessageModelLeaf l = new MessageModelLeaf("树叶F", new MessageModel("Message内容F", DateTime.Now));

        

        root.Add(l);

        root.Remove(l);



        Response.Write(root.GetData());

    }

}

运行结果

—树枝名称:树枝A

———树叶名称:树叶A;信息内容:Message内容A

———树叶名称:树叶B;信息内容:Message内容B

———树枝名称:树枝B

—————树叶名称:树叶C;信息内容:Message内容C

—————树叶名称:树叶D;信息内容:Message内容D

———树叶名称:树叶E;信息内容:Message内容E





参考

http://www.dofactory.com/Patterns/PatternComposite.aspx





OK

[源码下载]

乐在其中设计模式(C#) - 组合模式(Composite Pattern)的更多相关文章

  1. 二十四种设计模式:组合模式(Composite Pattern)

    组合模式(Composite Pattern) 介绍将对象组合成树形结构以表示"部分-整体"的层次结构.它使得客户对单个对象和复合对象的使用具有一致性.示例有一个Message实体 ...

  2. 【设计模式】组合模式 Composite Pattern

    树形结构是软件行业很常见的一种结构,几乎随处可见,  比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承 ...

  3. python 设计模式之组合模式Composite Pattern

    #引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...

  4. 设计模式-12组合模式(Composite Pattern)

    1.模式动机 很多时候会存在"部分-整体"的关系,例如:大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.在软件开发中也是这样,例如,文件系统中的文件与文件夹.窗体 ...

  5. 设计模式系列之组合模式(Composite Pattern)——树形结构的处理

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  6. 浅谈设计模式--组合模式(Composite Pattern)

    组合模式(Composite Pattern) 组合模式,有时候又叫部分-整体结构(part-whole hierarchy),使得用户对单个对象和对一组对象的使用具有一致性.简单来说,就是可以像使用 ...

  7. 设计模式 - 组合模式(composite pattern) 迭代器(iterator) 具体解释

    组合模式(composite pattern) 迭代器(iterator) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考组合模式(composit ...

  8. java_设计模式_组合模式_Composite Pattern(2016-08-12)

    概念: 组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. 有时候又叫做部分-整体模式,它使我们树 ...

  9. 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)

    原文:乐在其中设计模式(C#) - 提供者模式(Provider Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 作者:weba ...

随机推荐

  1. 解压tar.gz文件报错gzip: stdin: not in gzip format解决方法

    解压tar.gz文件报错gzip: stdin: not in gzip format解决方法 在解压tar.gz文件的时候报错 1 2 3 4 5 [Sun@localhost Downloads] ...

  2. 移动M站建设

    电商总结(五)移动M站建设   最近在一直在搞M站,也就是移动web站点.由于是第一次,也遇到了很多问题,所以把最近了解到的东西总结总结.聊一聊什么是移动M站,它有啥作用和优势. 也有人会问,M站和A ...

  3. poj3237(树链剖分)

    题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值): 2)取反操作,将a ...

  4. cocoa动态方法决议及消息转发

    假设给一个对象发送不能响应的消息,同一时候又没有进行动态方法决议,又没实现消息转发,那么就会引发以下的crash信息 2014-07-30 15:47:54.434 MethodNotFind[171 ...

  5. css中padding中样式的顺序含义

    4种可能的情况.举例说明: padding:10px; 四个内边距都是10px padding:5px 10px; 上下5px 左右10px padding:5px 10px 15px; 上5px 右 ...

  6. C的xml编程文章链接

    官方地址:http://www.xmlsoft.org/ http://hi.baidu.com/singyea/item/ed4d1c335a9527b8633aff82 http://os.chi ...

  7. 开源企业IM-免费企业即时通讯-ENTBOOST V2014.183 Windows版本号正式宣布

    ENTBOOST,VERSION 2014.183 Windows(点击下载)版本号公布.主要添加PC端P2P(点对点)文件传输功能:公布安卓Android手机clientAPP 1.0版本号.公布苹 ...

  8. 我写了一起 Makefile(一)

    我写了一起 Makefile  陈皓 概述—— 什么是makefile?也许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作.但我认为要作一个好的和pro ...

  9. 【PhotoShop】采用PS让美丽的咖啡泡沫

    稀土一杯咖啡,如何你不能击败张(常苦黑咖啡饮料实在受不了! ) 得到例如以下图 看着还不错,但是总感觉空空荡荡的,所以就拿来PS练手了.终于效果图例如以下: 以下讲下制作过程: 首先是给照片加下咖啡泡 ...

  10. ASF (0) - ASF Java 项目总览

    Apache .NET Ant Library This is a library of Ant tasks that help developing .NET software. It includ ...