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

本文介绍如何使用职责链模式处理消费计费系统中的不同消费时间段计费问题,通过创建一系列处理者对象并将其链接成一条链,每个处理者负责处理特定条件下的消费计费,有效地减少了发送者和接收者之间的耦合。

职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
在下机的时候,针对消费时间的不同相对应的就有不同的消费金额,那么就可以用职责链模式,根据消费时间的不同,是职责链对象在不同的消费时间的设定内进行传递,直到有满足条件时再返回处理。
可以在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); 
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值