zoukankan      html  css  js  c++  java
  • C#设计模式:职责链模式(Chain of Responsibility)

    一,什么是职责链模式(Chain of Responsibility)

    职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

    二,如下代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _20.职责链模式
    {
        /// <summary>
        /// 职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。
        /// 将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                People people = AuditorManager.GetAuditor();
                people.HandleRequest("中国人");
                people.HandleRequest("美国人");
            }
        }
        /// <summary>
        /// 管理审核者
        /// </summary>
        public class AuditorManager
        {
            private static People AuditorPeople = null;
    
            /// <summary>
            /// 初始化数据
            /// </summary>
            static AuditorManager()
            {
                Chinses chinses = new Chinses();
                Usa usa = new Usa();
                chinses.SetNext(usa);
                usa.SetNext(chinses);
                AuditorPeople = chinses;
            }
            public static People GetAuditor()
            {
                return AuditorPeople;
            }
        }
        /// <summary>
        /// 抽象审核者
        /// </summary>
        public abstract class People
        {
            public People _people { get; private set; }
    
            public void SetNext(People people)
            {
                this._people = people;
            }
            public string Name { get; set; }
            /// <summary>
            ///  定义一个处理请求的接口
            /// </summary>
            /// <param name="request"></param>
            public abstract void HandleRequest(string request);
        }
        /// <summary>
        /// 具体审核者
        /// </summary>
        public class Chinses : People
        {
            /// <summary>
            /// 处理其所负责的请求
            /// </summary>
            /// <param name="request"></param>
            public override void HandleRequest(string request)
            {
                if (request == "中国人")
                {
                    Console.WriteLine("中国人执行任务");
                }
                else
                {
                    base._people.HandleRequest(request);
                }
            }
        }
        /// <summary>
        /// 具体审核者
        /// </summary>
        public class Usa : People
        {
            /// <summary>
            /// 处理其所负责的请求
            /// </summary>
            /// <param name="request"></param>
            public override void HandleRequest(string request)
            {
                if (request == "美国人")
                {
                    Console.WriteLine("美国人执行任务");
                }
                else
                {
                    _people.HandleRequest(request);
                }
            }
        }
    }
  • 相关阅读:
    python web 框架的基本逻辑练习题
    jQuery 自定义方法(扩展方法)
    jQuery 的动画效果图片----隐藏打开方法
    jQuery 小练习-拖拉画面
    用jQuery来绑定事件的3种方法和区别
    css用hover制作下拉菜单
    巧用hover改变css样式和背景
    mpvue中按需引入echarts
    webpack配置css浏览器前缀
    Vue中使用Sass全局变量
  • 原文地址:https://www.cnblogs.com/May-day/p/9020740.html
Copyright © 2011-2022 走看看