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

C# 設計模式:組合模式葉子節點實作與異常處理 (4/5)

     編輯:關於C語言

葉子節點:MessageModelLeaf

實作 MessageModelComponent,代表樹狀結構中的葉子節點,持有實際資料 MessageModel:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.Composite
{
    /// 
    /// Message 實體樹葉(Leaf)
    /// 
    public class MessageModelLeaf : MessageModelComponent
    {
        /// 
        /// 建構函式
        /// 
        /// 名稱
        /// Message 實體物件
        public MessageModelLeaf(string name, MessageModel mm)
            : base(name, mm)
        {
        }

        /// 
        /// 添加操作:葉子節點不支援,拋出異常
        /// 
        /// MessageModelComponent
        public override void Add(MessageModelComponent mmc)
        {
            throw new Exception("不能添加");
        }

        /// 
        /// 移除操作:葉子節點不支援,拋出異常
        /// 
        /// MessageModelComponent
        public override void Remove(MessageModelComponent mmc)
        {
            throw new Exception("不能刪除");
        }

        /// 
        /// 獲取資料:返回格式化的葉子資訊
        /// 
        /// 縮進數
        /// 格式化字串
        public override string GetData(int indent)
        {
            return new String('—', indent) +
            "樹葉名稱:" + _name +
            ";信息內容:" + _messageModel.Message +
            "<br />";
        }
    }
}

Leaf 角色設計要點

  • 持有實際資料:建構函式接收 MessageModel,作為葉子節點的業務資料載體。
  • 禁用組合操作:Add()/Remove() 拋出異常,明確語意:葉子不可包含子節點。
  • 實作顯示邏輯:GetData() 格式化輸出葉子資訊,包含縮進視覺化。
  • 介面一致性:雖然行為不同,但仍實作相同抽象介面,確保客戶端可統一處理。

透明性 vs 安全性權衡

策略透明性 (本例)安全性
介面定義Component 宣告 Add/Remove只有 Composite 宣告 Add/Remove
客戶端調用統一介面,無需判斷型別需判斷是否為 Composite 才能調用
葉子實作拋出異常或空實作不實作 Add/Remove
優點客戶端簡單,對 Leaf/Composite 一視同仁編譯期檢查,避免運行時異常
缺點運行時可能拋出異常客戶端代碼較複雜

本例採用透明性設計,符合組合模式「使客戶對單個物件和組合物件的使用具有一致性」的核心意圖。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved