zoukankan      html  css  js  c++  java
  • 设计模式(十八):责任链模式

    一、定义

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

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

    二、实例

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

    首先,上下文类:

    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();

    结果:

    三、总结

    责任链 可以动态串联责任

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

  • 相关阅读:
    hwclock设置时间的调用过程是怎样的?
    git如何获取获取子模块的代码?
    hwclock和date源码分析
    linux内核是如何支持深度睡眠(deep sleep)方式的?
    mac下如何安装python3?
    linux内核中的__cpu_suspend是在哪里实现的呀?
    linux下安装oracle需要的配置
    linux实操常用命令总结
    linux下vi命令大全
    PHP100精华:很靠谱linux常用命令
  • 原文地址:https://www.cnblogs.com/sunchong/p/5148868.html
Copyright © 2011-2022 走看看