zoukankan      html  css  js  c++  java
  • 设计模式--职责链(学习)

    职责链---http://www.cnblogs.com/sc0791/p/3687856.html 

      /// <summary>
        /// 请求类 场景
        /// </summary>
        class Context
        {
            public Context(int day)
            {
                this.day = day;
            }
            private int day;
     
            public int Day
            {
                get { return day; }
                set { day = value; }
            }
     
        }

    代码剖析

    首先,该模式运用的是最基本的继承关系

    1,抽象类--提供操作人的姓名,并保存一个该类的实例,同时提供一个抽象的Pass方法

       /// <summary>
        /// 抽象基类
        /// </summary>
        abstract class Handler
        {
            public Handler(string name)
            {
                _name = name;
            }
            private string _name;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
            private Handler _handler;
            public Handler handler
            {
                get { return _handler; }
                set { _handler = value; }
            }
            //是否通过
            public abstract bool Pass(Context context);
        }

    子类--用于重写pass方法,给对象的handler赋值,在pass方法中通过调用指定handler属性实现一级一级的向下传递(这里的handler为下一级别的更高权限的操作)

     /// <summary>
        /// 部门经理 2天以下的部门签字就成了
        /// 
        /// </summary>
        public class Manager : Handler
        {
            public Manager(string name)
                : base(name)
            { }
            public override bool Pass(Context context)
            {
                if (context.Day <= 2)
                {
                    Console.Write("{0}已经签字通过", Name);
                    return true;
                }
                return handler.Pass(context);
            }
        }
        /// <summary>
        /// 总经理 2天以上需要总经理签字
        /// </summary>
        public class GeneralManager : Handler
        {
            public GeneralManager(string name)
                : base(name)
            { }
            public override bool Pass(Context context)
            {
                if (2 < context.Day)
                {
                    Console.Write("{0}已经签字通过", Name);
                    return true;
                }
                return handler.Pass(context);
            }
        }
        /// <summary>
        /// 董事长 7天以上需要总经理签字
        /// </summary>
        public class President : Handler
        {
            public President(string name)
                : base(name)
            { }
            public override bool Pass(Context context)
            {
                if (context.Day > 7)
                {
                    Console.Write("{0}已经签字通过", Name);
                    return true;
                }
                return handler.Pass(context);
            }
        }

    操作代码--通过指定的天数,判断是哪个级别的范围,不在本类范围内的交给handler操作

     class Program
        {
            static void Main(string[] args)
            {
                Context context = new Context(3);
                Handler manager = new Manager("部门经理");
                Handler gmanager = new GeneralManager("总经理");
                Handler president = new President("董事长");
           //通过给其handler赋值实现传递 manager.handler
    = gmanager;     //部门经理的上级是总经理 gmanager.handler = president;     //总经理的上级是董事长 manager.Pass(context); //调用最初级的pass方法 Console.ReadLine(); } }
  • 相关阅读:
    Linux的用户和组的属性
    Linux文件/目录 的新建、复制、移动(更名)、删除、查看、压缩命令
    排序算法和实现
    面试-三三原则
    phpstudy 最新版linux 面板 web防火墙后门防护功能教程
    小白必看的Python爬虫流程
    Python3迭代器与生成器
    python的异常处理机制
    python变量的作用域
    值得收藏的Python第三方库
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3688722.html
Copyright © 2011-2022 走看看