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

C# 設計模式:橋接模式完整測試與執行結果 (5/5)

     編輯:關於C語言

客戶端測試程式碼

展示如何在運行時動態切換實作部分(SQL/XML),驗證抽象與實作分離的效果:

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.Bridge;

public partial class Bridge : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        MyMessage m = new MyMessage();

        // 使用 SQL 實作
        m.AbstractMessage = new SqlMessage();
        Response.Write(m.Insert(new MessageModel("插入", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Get()[0].Message + " " + m.Get()[0].PublishTime.ToString());
        Response.Write("<br />");

        // 動態切換為 XML 實作
        m.AbstractMessage = new XMLMessage();
        Response.Write(m.Insert(new MessageModel("插入", DateTime.Now)));
        Response.Write("<br />");
        Response.Write(m.Get()[0].Message + " " + m.Get()[0].PublishTime.ToString());
    }
}

執行結果

True
SQL方式獲取Message(RefinedAbstraction) 2007-5-13 19:11:19
True
XML方式獲取Message(RefinedAbstraction) 2007-5-13 19:11:19

結果分析

  • 抽象與實作分離:MyMessage (RefinedAbstraction) 不變,透過設定 AbstractMessage 屬性切換實作。
  • 運行時切換:同一個抽象物件可在運行時綁定不同實作,無需重新建立抽象物件。
  • 功能擴展:MyMessage.Get() 在基礎實作結果上附加「(RefinedAbstraction)」,展示抽象層擴展能力。

橋接模式核心價值總結

優勢說明
抽象與實作獨立演化新增抽象子類別(如 MyMessage2)不影響實作;新增實作子類別(如 JsonMessage)不影響抽象。
避免類別爆炸若用繼承,需 SqlMessage、XmlMessage、JsonMessage × 多種抽象變體 = 類別數量乘積。橋接模式將兩維度解耦。
運行時綁定實作物件可在運行時動態注入,支援插件式架構。
符合開放封閉原則擴展抽象或實作均無需修改現有代碼。
橋接模式類別圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved