机房重构总结——职责链模式应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lairyi/article/details/84501024

职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
在下机的时候,针对消费时间的不同相对应的就有不同的消费金额,那么就可以用职责链模式,根据消费时间的不同,是职责链对象在不同的消费时间的设定内进行传递,直到有满足条件时再返回处理。
可以在B层写一个职责链模式的类(Chain of Responsibility),也可以独立于七层写,这个类包含它的抽象方法Handler和它的子类方法。但是因为Void类型没有返回值,这样在UI层进行调用的时候就会出现“错误:“无法将“void”类型隐式转换为“string””。所以在实例化职责链各个子类的时候就要将它们写在一个“string”类型的方法中,这样可以在Facade层可以有返回值“string”,同时在UI层也就可以调用。

下面是代码展示。

B层:

public class Chain_of_Responsibility
    {
        //定义全局变量,消费总额:cashcount;
        public static string cashcount;

        //抽象方法;
        public abstract class HandlerCash
        {
            //设置继任者successor;
            protected HandlerCash successor;
            public void Setsuccessor(HandlerCash successor)
            {
                this.successor = successor;
            }
          
            //在下机的时候要调用basic数据库表和line表里的数据,所有可以在抽象方法的参数中直接调用这两个实体层对象,
            即:(Model.ModifyInfomationModel basictime, Model.OnlinestateModel time)
            //抽象方法Cashcount;
            public abstract void Cashcount(Model.ModifyInfomationModel basictime, Model.OnlinestateModel time);
        }



        //第一个继任者子类;
        public class HandlerLeasttimecash : HandlerCash
        {
            public override void Cashcount(Model.ModifyInfomationModel basictime, Model.OnlinestateModel time)
            {
                //如果消费时间<=基本设定的时间,消费金额就是5元;
                if (Convert.ToInt32(time.Consumetime) <= basictime.Leastonlinetime)
                {
                    cashcount = basictime.LeastMoney.ToString();
                }
                else
                {
                    //继任者的抽象方法,向下传递
                    successor.Cashcount(basictime, time);
                }
            }
        }


        //第二个继任者子类;
        public class HandlerNormaltimecash : HandlerCash
        {
            public override void Cashcount(Model.ModifyInfomationModel basictime, Model.OnlinestateModel time)
            {
                //定义变量,便于相乘;
                int consumecash = Convert.ToInt32(time.Consumecash);
                //大于上机时间在优惠时间之内的价格,
                int price = 8;
                if (Convert.ToInt32(time.Consumetime) > basictime.Leastonlinetime && Convert.ToInt32(time.Consumetime) <= basictime.Recordtime1)
                {
                    //上机时间大于最少上机时间,小于优惠时间时,    
                    consumecash = Convert.ToInt32(time.Consumetime) * price;
                    cashcount = consumecash.ToString();
                }
                else
                {
                    successor.Cashcount(basictime, time);
                }
            }
        }


        //第三个继任者子类;
        public class HandlerRewordtimecash : HandlerCash
        {
            public override void Cashcount(Model.ModifyInfomationModel basictime, Model.OnlinestateModel time)
            {
                //优惠时间打八折;
                double price = 6.4;
                int consumetime = Convert.ToInt32(time.Consumetime);
                int consumecash = Convert.ToInt32(time.Consumecash);
                if (Convert.ToInt32(time.Consumetime) > basictime.Recordtime1)
                {
                    consumecash = Convert.ToInt32(price) * consumetime;
                    cashcount = consumecash.ToString();
                }
                else
                {
                    successor.Cashcount(basictime, time);
                }
            }
        }





       在这里写一个“string”方法,同时实例化各个子类,直接返回全局变量cashcount

        //职责链模式的方法调用;
        public string Responsibilitycashcost(Model.ModifyInfomationModel basictime, Model.OnlinestateModel time)
        {
            //实例化职责链的各个子类
            HandlerLeasttimecash leasttime = new HandlerLeasttimecash();
            HandlerNormaltimecash normaltime = new HandlerNormaltimecash();
            HandlerRewordtimecash rewordtime = new HandlerRewordtimecash();
            leasttime.Setsuccessor(normaltime);
            normaltime.Setsuccessor(rewordtime);
            //返回消费金额;
            leasttime.Cashcount(basictime, time);
            return cashcount; 
        }
Facade层:

        //计算消费金额的方法,职责链模式;
        public string Responsibilitycashcost(Model.ModifyInfomationModel basictime, Model.OnlinestateModel time)
        {
            Chain_of_Responsibility bllchain = new Chain_of_Responsibility();
            return bllchain.Responsibilitycashcost(basictime, time);
            
        }
UI层:
     mode.Consumecash = facadeapart.Responsibilitycashcost(basictime, mode); 

猜你喜欢

转载自blog.csdn.net/lairyi/article/details/84501024