您的位置:首页 > 其它

职责链模式

2014-05-07 12:50 375 查看
在前面的几篇文章中,介绍完了所有的结构型和创建型设计模式。现在开始就将行为型设计模式,让职责链模式作为第一个讲解的行为型设计模式。

职责链模式解决一个请求有多个处理者的问题,它将请求的处理者组织成一条链,并让请求沿着链传递,客户端只要发送请求即可,无需关心其他细节,如此便实现了请求的发送和处理解耦。

以下是它的结构图:



以一个例子来说吧。

在一个假条审批模块中,如果员工请假不超过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("董事长批准假条");
}
}
}


代码还算简单吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: