C#设计模式整理

  我居然连一月一随笔都没有,啊啊啊,忙死个人

  这个随笔主要是记录基于自己学习[美]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码好....

我在用的时候只添加了两个接口方法,原因在于将注释部分都实现后,在外部可以手动执行链,这在我看来与职责链模式的对象"自治"相悖,

以及只包含两个接口方法相对简洁。但无疑的是都实现后,易读/易用性更强。

猜你喜欢

转载自www.cnblogs.com/xuanhu/p/10459407.html