我居然連一月一隨筆都沒有,啊啊啊,忙死個人 這個隨筆主要是記錄基於自己學習[美]James W.Cooper著的《C# Design Patterns : A Tutorial》一書中常用設計模式的整理,既是自己整理的, 便不會與書中所講完全相同,且避免不了存在不足的地方,歡迎分享寶貴見解。隨筆中會 ...
我居然連一月一隨筆都沒有,啊啊啊,忙死個人
這個隨筆主要是記錄基於自己學習[美]James W.Cooper著的《C# Design Patterns : A Tutorial》一書中常用設計模式的整理,既是自己整理的,
便不會與書中所講完全相同,且避免不了存在不足的地方,歡迎分享寶貴見解。隨筆中會穿插書中語句,侵告刪。
Behavioral Pattern 行為型模式
行為型模式模式主要與對象間的通信有關。
Chain of Responsibility(職責鏈模式),職責鏈模式減少對象間的耦合。整理了一個介面,如下:
/// <summary> /// 職責鏈模式 /// 職責鏈減少了類之間的耦合 /// </summary> /// <typeparam name="T"></typeparam> public interface IChain<T> { // IChain<T> NextChain { get; set; } /// <summary> /// 添加一條鏈至本鏈後 /// </summary> /// <param name="nextChain"></param> void AddNext(IChain<T> nextChain); /// <summary> /// 消息處理 /// </summary> /// <param name="msg"></param> void OnChain(T msg); // void SendToNext(T msg); // bool HasNext(); }View Code
實現方式:實現了介面的鏈對象one by one 鏈接,直到最後一個鏈,如果鏈首對象不能處理消息,則將消息傳遞給下一個鏈對象,鏈尾對象提供預設處理方式或是將消息丟棄。
IChain<T> _prior, _inferior, _default; // 多個實現了介面的對象,其中最_default對象位於鏈的末端,處理所有消息或丟棄。
_prior.AddNext(_inferior); // 位於鏈首的對像先先對消息進行處理
_inferior.AddNext(_default);
_prior.OnChain(T msg); // 將消息給鏈首對象進行處理
void IChain<T>.OnChain(T msg)
{
if (_prior can't handle this msg)
{
if (_prior.HasNext()) // 即_prior.NextChain != null
{
_prior.SendToNext(msg); // 即_prior.NextChain.OnChain(msg); 實現消息在鏈間的傳遞
}
else // 假設此時在鏈尾對象,進行預設的操作
{
throw new MethodAccessException("no one to handle the msg");
}
}
else
{
// handle the msg
}
} // 下次還是先在vs碼好....
我在用的時候只添加了兩個介面方法,原因在於將註釋部分都實現後,在外部可以手動執行鏈,這在我看來與職責鏈模式的對象"自治"相悖,
以及只包含兩個介面方法相對簡潔。但無疑的是都實現後,易讀/易用性更強。