繼承基礎抽象 Message,在委派實作基礎上增加額外行為:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Bridge
{
///
/// 操作 Message(RefinedAbstraction)
///
public class MyMessage : Message
{
///
/// 獲取 Message
///
/// MessageModel 清單
public override List<MessageModel> Get()
{
List<MessageModel> l = base.Get();
foreach (MessageModel mm in l)
{
mm.Message += "(RefinedAbstraction)";
}
return l;
}
}
}
定義實作部分的抽象介面,包含核心操作方法:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Bridge
{
///
/// 操作 Message(Implementor)
///
public abstract class AbstractMessage
{
///
/// 獲取 Message
///
/// MessageModel 清單
public abstract List<MessageModel> Get();
///
/// 插入 Message
///
/// Message 實體物件
/// 是否成功
public abstract bool Insert(MessageModel mm);
}
}
Abstraction (Message) ───────► Implementor (AbstractMessage)
│ │
▼ ▼
RefinedAbstraction (MyMessage) ConcreteImplementor (SqlMessage, XMLMessage)
Message 持有 AbstractMessage 參考,Get()/Insert() 委派給實作物件。MyMessage 覆寫 Get(),在基礎結果上附加標識,展示抽象層如何擴展功能而不修改實作層。AbstractMessage 只定義核心操作,不包含抽象層特有邏輯。此設計完美詮釋橋接模式「將抽象部分與它的實現部分分離,使它們都可以獨立地變化」的核心意圖。