当前位置: 移动技术网 > IT编程>软件设计>设计模式 > C#设计模式整理

C#设计模式整理

2019年03月02日  | 移动技术网IT编程  | 我要评论

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

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

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

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

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网