首页 > 其他 > 详细

设计模式(十八):责任链模式

时间:2016-01-22 08:10:40      阅读:116      评论:0      收藏:0      [点我收藏+]

一、定义

请求在这个链上传递,直到链上的某一个对象决定处理此请求。

发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

二、实例

其实和状态模式类似,只是状态模式在具体的子类中指定了下一个具体的处理对象。而责任链模式,可以在客户端动态的组织链的规则和责任。

首先,上下文类:

public class Context
    {
        public string Suffix { get; set; }        
    }

其次,抽象责任

 public abstract class BaseHttpModule
    {
        public BaseHttpModule NextHttpModule { get; set; }
        public abstract void Requsest(Context context);
    }

具体实现:

  public class FirstHttpModule : BaseHttpModule
    {
        public override void Requsest(Context context)
        {
            if (context.Suffix == ".aspx")
            {
                Console.WriteLine("文件后缀为:{0}", context.Suffix);
            }
            else if (NextHttpModule != null)
            {
                NextHttpModule.Requsest(context);
            }
        }
    }
 public class LastHttpModule : BaseHttpModule
    {
        public override void Requsest(Context context)
        {
            if (context.Suffix == ".cshtml")
            {
                Console.WriteLine("文件后缀为:{0}", context.Suffix);
            }
            else if (NextHttpModule != null)
            {
                NextHttpModule.Requsest(context);
            }
        }
    }

客户端:

 //------------------------责任链模式----------------------
            Responsibility.Context resquestContext = new Responsibility.Context();
            resquestContext.Suffix = ".cshtml";

            Responsibility.BaseHttpModule aspx = new Responsibility.FirstHttpModule();
            Responsibility.BaseHttpModule cshtml = new Responsibility.LastHttpModule();
            aspx.NextHttpModule = cshtml;

            aspx.Requsest(resquestContext);
            Console.ReadKey();

结果:

技术分享

三、总结

责任链 可以动态串联责任

状态模式 流程在子类中已经确定。

设计模式(十八):责任链模式

原文:http://www.cnblogs.com/sunchong/p/5148868.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!