首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:組合模式樹枝節點完整實作 (5/5)

     編輯:關於C語言

樹枝節點:MessageModelComposite

實作 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;
        }
    }
}

Composite 核心特徵

  • 子節點集合:List<MessageModelComponent> 儲存子節點,支援任意深度巢狀。
  • 統一介面:Add()/Remove()/GetData() 實作抽象介面,葉子與樹枝共用相同介面。
  • 遞歸遍歷:GetData() 透過遞歸處理整棵樹,indent 參數控制視覺縮進。
  • 透明性:客戶端對單一物件(Leaf)與組合物件(Composite)使用一致介面。

組合模式經典應用場景

  • 檔案系統(資料夾/檔案)
  • GUI 元件樹(容器/控制項)
  • 組織結構(部門/員工)
  • XML/HTML DOM 樹
  • 選單系統(主選單/子選單/選單項)
組合模式類別圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved