职责链模式
2014-05-07 12:50
375 查看
在前面的几篇文章中,介绍完了所有的结构型和创建型设计模式。现在开始就将行为型设计模式,让职责链模式作为第一个讲解的行为型设计模式。
职责链模式解决一个请求有多个处理者的问题,它将请求的处理者组织成一条链,并让请求沿着链传递,客户端只要发送请求即可,无需关心其他细节,如此便实现了请求的发送和处理解耦。
以下是它的结构图:
以一个例子来说吧。
在一个假条审批模块中,如果员工请假不超过3天,主任有权批准,请假3-10天经理有权批准,大于十天则需要董事长批准。
以下是代码:
代码还算简单吧。
职责链模式解决一个请求有多个处理者的问题,它将请求的处理者组织成一条链,并让请求沿着链传递,客户端只要发送请求即可,无需关心其他细节,如此便实现了请求的发送和处理解耦。
以下是它的结构图:
以一个例子来说吧。
在一个假条审批模块中,如果员工请假不超过3天,主任有权批准,请假3-10天经理有权批准,大于十天则需要董事长批准。
以下是代码:
public class ThirtenthChainofResponsibility { public static void main(String[] args) { // TODO Auto-generated method stub LeaveRequest req = new LeaveRequest(15); Approver director = new Director(); Approver manager = new Manager(); Approver president = new President(); director.setApprover(manager); manager.setApprover(president); director.processRequest(req); } } class LeaveRequest{ private int days; public LeaveRequest(int days){ this.days = days; } public int getDays(){ return days; } } abstract class Approver{ protected Approver next; public void setApprover(Approver next){ this.next = next; } abstract public void processRequest(LeaveRequest req); } class Director extends Approver{ public void processRequest(LeaveRequest req){ if(req.getDays() < 3){ System.out.println("主任批准假条"); } else{ System.out.println("主任无法批准"+req.getDays()+"天的假条"); next.processRequest(req); } } } class Manager extends Approver{ public void processRequest(LeaveRequest req){ if(req.getDays() < 10 && req.getDays() >= 3){ System.out.println("经理批准假条"); } else{ System.out.println("经理无法批准"+req.getDays()+"天的假条"); next.processRequest(req); } } } class President extends Approver{ public void processRequest(LeaveRequest req){ if(req.getDays() >= 10){ System.out.println("董事长批准假条"); } } }
代码还算简单吧。
相关文章推荐
- linux设备驱动之——V4L2
- 解决职业危机的五个建议
- unity3d KeyCode各键值说明
- IOS 申请发布证书图文详解
- 【DOS】ECHO命令
- 【解决办法】outlook2003收发进度条卡住现象(exchange模式)
- 第五周作业
- 流量劫持是如何产生的之上古时代(1/3)
- 对于Java单例设计模式的总结和分析
- PL/SQL函数和过程
- Exchange Server 2010高可用设计
- 使用libcurl源码编译不过的问题
- 推荐一款针对于程序员开发的字体Source Code Pro
- LeetCode:Maximum Subarray
- WPF - MVVM - 如何将ComboBox的Selectchange事件binding到ViewModel
- 第四周作业
- 【python】中文乱码问题
- mysql replication 学习笔记
- 创业失败的七个原因及解决之道
- UVa - 10106 - Product