标签:asn play 没有 ace 之间 有关 耦合 att 链接
我居然连一月一随笔都没有,啊啊啊,忙死个人
这个随笔主要是记录基于自己学习[美]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(); }
实现方式:实现了接口的链对象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码好....
我在用的时候只添加了两个接口方法,原因在于将注释部分都实现后,在外部可以手动执行链,这在我看来与职责链模式的对象"自治"相悖,
以及只包含两个接口方法相对简洁。但无疑的是都实现后,易读/易用性更强。
标签:asn play 没有 ace 之间 有关 耦合 att 链接
原文地址:https://www.cnblogs.com/xuanhu/p/10459407.html