首页 > 其他 > 详细

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

时间:2014-03-10 15:42:20      阅读:467      评论:0      收藏:0      [点我收藏+]
原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern)

[索引页]
[源码下载]


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


作者:webabcd


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


示例
有一个Message实体类,使其单个对象和复合对象具有一致性。
bubuko.com,布布扣


MessageModel
bubuko.com,布布扣using System;
bubuko.com,布布扣
using System.Collections.Generic;
bubuko.com,布布扣
using System.Text;
bubuko.com,布布扣
bubuko.com,布布扣
namespace Pattern.Composite
bubuko.com,布布扣
{
bubuko.com,布布扣    
/// <summary>
bubuko.com,布布扣    
/// Message实体类
bubuko.com,布布扣    
/// </summary>

bubuko.com,布布扣    public class MessageModel
bubuko.com,布布扣    
{
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 构造函数
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="msg">Message内容</param>
bubuko.com,布布扣        
/// <param name="pt">Message发布时间</param>

bubuko.com,布布扣        public MessageModel(string msg, DateTime pt)
bubuko.com,布布扣        
{
bubuko.com,布布扣            
this._message = msg;
bubuko.com,布布扣            
this._publishTime = pt;
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
private string _message;
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// Message内容
bubuko.com,布布扣        
/// </summary>

bubuko.com,布布扣        public string Message
bubuko.com,布布扣        
{
bubuko.com,布布扣            
get return _message; }
bubuko.com,布布扣            
set { _message = value; }
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
private DateTime _publishTime;
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// Message发布时间
bubuko.com,布布扣        
/// </summary>

bubuko.com,布布扣        public DateTime PublishTime
bubuko.com,布布扣        
{
bubuko.com,布布扣            
get return _publishTime; }
bubuko.com,布布扣            
set { _publishTime = value; }
bubuko.com,布布扣        }

bubuko.com,布布扣    }

bubuko.com,布布扣}

bubuko.com,布布扣

MessageModelComponent
bubuko.com,布布扣using System;
bubuko.com,布布扣
using System.Collections.Generic;
bubuko.com,布布扣
using System.Text;
bubuko.com,布布扣
bubuko.com,布布扣
namespace Pattern.Composite
bubuko.com,布布扣
{
bubuko.com,布布扣    
/// <summary>
bubuko.com,布布扣    
/// 抽象Message实体构件(Component)
bubuko.com,布布扣    
/// </summary>

bubuko.com,布布扣    public abstract class MessageModelComponent
bubuko.com,布布扣    
{
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// Message实体对象
bubuko.com,布布扣        
/// </summary>

bubuko.com,布布扣        protected MessageModel _messageModel;
bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 名称
bubuko.com,布布扣        
/// </summary>

bubuko.com,布布扣        protected string _name;
bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 构造函数
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="name">名称</param>
bubuko.com,布布扣        
/// <param name="mm">Message实体对象</param>

bubuko.com,布布扣        public MessageModelComponent(string name, MessageModel mm)
bubuko.com,布布扣        
{
bubuko.com,布布扣            
this._name = name;
bubuko.com,布布扣            
this._messageModel = mm;
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 构造函数
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="name">名称</param>

bubuko.com,布布扣        public MessageModelComponent(string name)
bubuko.com,布布扣        
{
bubuko.com,布布扣            
this._name = name;
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 添加
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="mmc">MessageModelComponent</param>

bubuko.com,布布扣        public abstract void Add(MessageModelComponent mmc);
bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 删除
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="mmc">MessageModelComponent</param>

bubuko.com,布布扣        public abstract void Remove(MessageModelComponent mmc);
bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 获取
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="indent">缩进数</param>
bubuko.com,布布扣        
/// <returns></returns>

bubuko.com,布布扣        public abstract string GetData(int indent);
bubuko.com,布布扣    }

bubuko.com,布布扣}

bubuko.com,布布扣

MessageModelLeaf
bubuko.com,布布扣using System;
bubuko.com,布布扣
using System.Collections.Generic;
bubuko.com,布布扣
using System.Text;
bubuko.com,布布扣
bubuko.com,布布扣
namespace Pattern.Composite
bubuko.com,布布扣
{
bubuko.com,布布扣    
/// <summary>
bubuko.com,布布扣    
/// Message实体树叶(Leaf)
bubuko.com,布布扣    
/// </summary>

bubuko.com,布布扣    public class MessageModelLeaf : MessageModelComponent
bubuko.com,布布扣    
{
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 构造函数
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="name">名称</param>
bubuko.com,布布扣        
/// <param name="mm">Message实体对象</param>

bubuko.com,布布扣        public MessageModelLeaf(string name, MessageModel mm)
bubuko.com,布布扣            : 
base(name, mm)
bubuko.com,布布扣        
{
bubuko.com,布布扣            
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 添加
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="mmc">MessageModelComponent</param>

bubuko.com,布布扣        public override void Add(MessageModelComponent mmc)
bubuko.com,布布扣        
{
bubuko.com,布布扣            
throw new Exception("不能添加");
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 删除
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="mmc">MessageModelComponent</param>

bubuko.com,布布扣        public override void Remove(MessageModelComponent mmc)
bubuko.com,布布扣        
{
bubuko.com,布布扣            
throw new Exception("不能删除");
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 获取
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="indent">缩进数</param>
bubuko.com,布布扣        
/// <returns></returns>

bubuko.com,布布扣        public override string GetData(int indent)
bubuko.com,布布扣        
{
bubuko.com,布布扣            
return new String(, indent) + 
bubuko.com,布布扣                
"树叶名称:" + _name + 
bubuko.com,布布扣                
";信息内容:" + _messageModel.Message + 
bubuko.com,布布扣                
"<br />";
bubuko.com,布布扣        }

bubuko.com,布布扣    }

bubuko.com,布布扣}

bubuko.com,布布扣

MessageModelComposite
bubuko.com,布布扣using System;
bubuko.com,布布扣
using System.Collections.Generic;
bubuko.com,布布扣
using System.Text;
bubuko.com,布布扣
bubuko.com,布布扣
namespace Pattern.Composite
bubuko.com,布布扣
{
bubuko.com,布布扣    
/// <summary>
bubuko.com,布布扣    
/// Message实体树枝(Composite)
bubuko.com,布布扣    
/// </summary>

bubuko.com,布布扣    public class MessageModelComposite : MessageModelComponent
bubuko.com,布布扣    
{
bubuko.com,布布扣        
private List<MessageModelComponent> _list;
bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 构造函数
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="name">名称</param>

bubuko.com,布布扣        public MessageModelComposite(string name)
bubuko.com,布布扣            : 
base(name)
bubuko.com,布布扣        
{
bubuko.com,布布扣            _list 
= new List<MessageModelComponent>();
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 添加
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="mmc">MessageModelComponent</param>

bubuko.com,布布扣        public override void Add(MessageModelComponent mmc)
bubuko.com,布布扣        
{
bubuko.com,布布扣            _list.Add(mmc);
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 删除
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="mmc">MessageModelComponent</param>

bubuko.com,布布扣        public override void Remove(MessageModelComponent mmc)
bubuko.com,布布扣        
{
bubuko.com,布布扣            _list.Remove(mmc);
bubuko.com,布布扣        }

bubuko.com,布布扣
bubuko.com,布布扣        
/// <summary>
bubuko.com,布布扣        
/// 获取
bubuko.com,布布扣        
/// </summary>
bubuko.com,布布扣        
/// <param name="indent">缩进数</param>
bubuko.com,布布扣        
/// <returns></returns>

bubuko.com,布布扣        public override string GetData(int indent)
bubuko.com,布布扣        
{
bubuko.com,布布扣            
string s = new String(, indent) + 
bubuko.com,布布扣                
"树枝名称:" + _name + 
bubuko.com,布布扣                
"<br />";
bubuko.com,布布扣
bubuko.com,布布扣            
foreach (MessageModelComponent mmc in _list)
bubuko.com,布布扣            
{
bubuko.com,布布扣                s 
+= mmc.GetData(indent + 2);
bubuko.com,布布扣            }

bubuko.com,布布扣
bubuko.com,布布扣            
return s;
bubuko.com,布布扣        }

bubuko.com,布布扣    }

bubuko.com,布布扣}

bubuko.com,布布扣


Test
bubuko.com,布布扣using System;
bubuko.com,布布扣
using System.Data;
bubuko.com,布布扣
using System.Configuration;
bubuko.com,布布扣
using System.Collections;
bubuko.com,布布扣
using System.Web;
bubuko.com,布布扣
using System.Web.Security;
bubuko.com,布布扣
using System.Web.UI;
bubuko.com,布布扣
using System.Web.UI.WebControls;
bubuko.com,布布扣
using System.Web.UI.WebControls.WebParts;
bubuko.com,布布扣
using System.Web.UI.HtmlControls;
bubuko.com,布布扣
bubuko.com,布布扣
using Pattern.Composite;
bubuko.com,布布扣
bubuko.com,布布扣
public partial class Composite : System.Web.UI.Page
bubuko.com,布布扣
{
bubuko.com,布布扣    
protected void Page_Load(object sender, EventArgs e)
bubuko.com,布布扣    
{
bubuko.com,布布扣        MessageModelComposite root 
= new MessageModelComposite("树枝A");
bubuko.com,布布扣
bubuko.com,布布扣        root.Add(
new MessageModelLeaf("树叶A"new MessageModel("Message内容A", DateTime.Now)));
bubuko.com,布布扣        root.Add(
new MessageModelLeaf("树叶B"new MessageModel("Message内容B", DateTime.Now)));
bubuko.com,布布扣
bubuko.com,布布扣        MessageModelComposite comp 
= new MessageModelComposite("树枝B");
bubuko.com,布布扣
bubuko.com,布布扣        comp.Add(
new MessageModelLeaf("树叶C"new MessageModel("Message内容C", DateTime.Now)));
bubuko.com,布布扣        comp.Add(
new MessageModelLeaf("树叶D"new MessageModel("Message内容D", DateTime.Now)));
bubuko.com,布布扣
bubuko.com,布布扣        root.Add(comp);
bubuko.com,布布扣
bubuko.com,布布扣        root.Add(
new MessageModelLeaf("树叶E"new MessageModel("Message内容E", DateTime.Now)));
bubuko.com,布布扣
bubuko.com,布布扣        MessageModelLeaf l 
= new MessageModelLeaf("树叶F"new MessageModel("Message内容F", DateTime.Now));
bubuko.com,布布扣        
bubuko.com,布布扣        root.Add(l);
bubuko.com,布布扣        root.Remove(l);
bubuko.com,布布扣
bubuko.com,布布扣        Response.Write(root.GetData(
1));
bubuko.com,布布扣    }

bubuko.com,布布扣}

bubuko.com,布布扣

运行结果
—树枝名称:树枝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),布布扣,bubuko.com

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

原文:http://www.cnblogs.com/lonelyxmas/p/3590338.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!