职责链模式

来源:互联网 发布:淘宝贷款逾期無法再借 编辑:程序博客网 时间:2024/06/10 21:26




很简单,类图如图所示,管理者抽象类有很多子类,是具体的管理者类,这些管理者类有级别的高低关系。管理者是用来处理申请的,有一个申请类,因为申请对象作为管理者类工作函数的形参,所以具体管理者类和申请类属于依赖关系,具体管理者类依赖于申请类。每一个管理者如果不能处理当前申请,则交由上级管理者处理,故每一个管理者类都需要定义一个上级管理者对象,所以应该在抽象管理者类上画上自关联(图中画的是聚合关系,差不多啦,聚合关系是更强的关联关系)



using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 职责链模式{    class Request    {        private int time;        public int Time        {            get { return time; }            set { time = value; }        }            }    abstract class Manager    {        protected Manager superior;        public void setSuperior(Manager x )        {            this.superior = x;        }        abstract public void cope(Request rqt);        protected string name;        public string Name        {            get { return name; }            set { name = value; }        }    }    class ManagerA:Manager    {                        override public void cope(Request rqt)        {            if(rqt.Time<5)            {                Console.WriteLine("时间{0},批准by {1}",rqt.Time,name);            }            else            {                superior.cope(rqt);            }        }    }    class ManagerB : Manager    {        override public void cope(Request rqt)        {            if (rqt.Time < 10)            {                Console.WriteLine("时间{0},批准by {1}", rqt.Time, name);            }            else            {                Console.WriteLine("时间{0},不批准by {1}", rqt.Time, name);            }        }    }    class Program    {        static void Main(string[] args)        {            ManagerA a = new ManagerA(); a.Name = "a";            ManagerB b = new ManagerB(); b.Name = "b";            a.setSuperior(b);            Request rqt = new Request();                        rqt.Time = 4; a.cope(rqt);            rqt.Time = 7;a.cope(rqt);            rqt.Time = 11; a.cope(rqt);        }    }}

时间4,批准by a时间7,批准by b时间11,不批准by b请按任意键继续. . .