设计模式——职责链模式
来源:互联网 发布:手机淘宝怎么看直播间 编辑:程序博客网 时间:2024/05/12 21:44
定义:使多个对象都有机会处理客户端发出的请求,从而避免请求的发送者和接受之间的耦合关系,将这些对象连城一条线,沿着这条线传递该请求,直到有一个对象处理它为止。
好处:当客户提交一个请求时,请求是沿着链传递,直到有一个对象来处理这个请求。而这个链是客户端来构造的,所以所对象这件具有灵活性。该设计模式解决了因为大量的分支判断造成难维护,灵活性差的问题。
在设计机房这块的时候,因为下机涉及到一大堆判断。总不能在U层调一个方法判断一个吧。想着一个方法就搞定了。涉及的判断如下:首先判断卡号是否存在,卡号是否正在上机,然后在对用户类型进行判断,再然后对时间进行判断。加上同学们的说法,我就用了职责链模式。然而结果~~~ 。出现的问题:机房职责链的代码完成了,调试走了一遍,发现了一个严重的问题,这条链走完了,但是处理完了,它竟然又沿着这条链往回走了,又返回到了初始的继任者。真是醉了。于是果断放弃。遗憾的是把出错的代码给删了。
//请求类class Request{ public string RequestType; public int Number; public string RequestContent;}//抽象类 管理者abstract class Manager{ protected string name; protected Manager superior; public Manager(string name) { this.name = name; } public void SetSuperior(Manager superior) { this.superior = superior; } abstract public void RequestApplications(Request request);}//经理class CommonManager : Manager{ public CommonManager(string name) : base(name) { } public override void RequestApplications(Request request) { if (request.RequestType == "请假" && request.Number <= 2) { Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.RequestContent, request.Number); } else { if (superior != null) //执行不了,就返回到下一任 superior.RequestApplications(request); } }}//总监class Majordomo : Manager{ public Majordomo(string name) : base(name) { } public override void RequestApplications(Request request) { if (request.RequestType == "请假" && request.Number <= 5) { Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.RequestContent, request.Number); } else //执行不了,就返回到下一任者 { if (superior != null) superior.RequestApplications(request); } }}
总结:运用设计模式不能生搬硬套啊,一定要多看看别人的博客,多翻看以前的书本。遇到问题,多调试几遍。
0 0
- 《设计模式》——职责链模式
- 设计模式——职责链模式
- 设计模式——职责链模式
- 设计模式——职责链模式
- 设计模式——职责链模式
- 设计模式——职责链
- 设计模式——职责链
- 设计模式—职责连模式
- 设计模式—职责连模式
- 职责链设计模式
- 【设计模式】职责链
- 设计模式---职责链
- 职责链设计模式
- 职责链设计模式
- 每日设计模式——职责链模式
- C#设计模式之14——职责链模式
- java设计模式——职责链模式
- OOP设计模式[JAVA]——03职责链模式
- LaTeX排版学习记录
- 【慕课笔记】第四章 JAVA中的集合框架(上) 第3节 学生选课—创建学生类和课程类
- file_get_contents("php://input")的使用方法
- Linux解压缩命令
- 《c++primer》学习随笔——预处理器变量
- 设计模式——职责链模式
- 修改openstack Ubuntu镜像的默认用户的密码
- ASP.NET
- 对话框过程
- Ubuntu 下配置VPN
- Mina系列文章索引
- this关键字
- 使用sqlldr导入GPS数据含有clob字段和双引号
- PopUpWindow使用详解(一)——基本使用