實作 MessageModelComponent 抽象類別,代表樹狀結構中的非葉子節點,可包含子節點:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Composite
{
///
/// Message 實體樹枝(Composite)
///
public class MessageModelComposite : MessageModelComponent
{
private List<MessageModelComponent> _list;
///
/// 建構函式
///
/// 名稱
public MessageModelComposite(string name)
: base(name)
{
_list = new List<MessageModelComponent>();
}
///
/// 添加子節點
///
/// MessageModelComponent
public override void Add(MessageModelComponent mmc)
{
_list.Add(mmc);
}
///
/// 移除子節點
///
/// MessageModelComponent
public override void Remove(MessageModelComponent mmc)
{
_list.Remove(mmc);
}
///
/// 獲取樹狀資料(遞歸遍歷)
///
/// 縮進數
/// 格式化字串
public override string GetData(int indent)
{
string s = new String('—', indent) +
"樹枝名稱:" + _name +
"<br />";
foreach (MessageModelComponent mmc in _list)
{
s += mmc.GetData(indent + 2);
}
return s;
}
}
}
List<MessageModelComponent> 儲存子節點,支援任意深度巢狀。Add()/Remove()/GetData() 實作抽象介面,葉子與樹枝共用相同介面。GetData() 透過遞歸處理整棵樹,indent 參數控制視覺縮進。