当前位置: 移动技术网 > IT编程>开发语言>Java > 设计模式:责任链模式

设计模式:责任链模式

2019年01月15日  | 移动技术网IT编程  | 我要评论
将能够处理同一类请求的对象形成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求 如果能则处理,否则传递给下一个对象。 例如:公司行政审批流程,斗地主游戏,田径项目中接力运动等。都是责任链模式 的运用。 责任链可能是一条直线,一个环链或者是一个树结构的一部分。 责任链涉及角色: ...

  将能够处理同一类请求的对象形成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求

如果能则处理,否则传递给下一个对象。

  例如:公司行政审批流程,斗地主游戏,田径项目中接力运动等。都是责任链模式 的运用。

  责任链可能是一条直线,一个环链或者是一个树结构的一部分。

责任链涉及角色:

  抽象处理者角色(handler):定义一个处理请求的接口。可以定义一个方法返回对下家对象的引用。

  具体处理者角色(concretehandler):具体处理者接到请求后,可以处理该请求或者将请求传给下家。

例子:

  模拟一个请假处理流程

  

/**
* 领导
* 抽象类
*/
public abstract class leader {
//子类实现
protected string name;
//下一个责任链对象
protected leader next;

//处理请求抽象方法
abstract void handleleavenotes(leavenote note);

public leader(string name) {
this.name = name;
}

public leader(string name, leader next) {
this.name = name;
this.next = next;
}

public string getname() {
return name;
}

public void setname(string name) {
this.name = name;
}

public leader getnext() {
return next;
}

public void setnext(leader next) {
this.next = next;
}
}

  

**
 * 请假条
 */
public class leavenote {

    private string department;

    private string name;

    private integer days;

    private string reason;

    //...get set
}

  

/**
* 部门领导
*/
public class departmanager extends leader {


public departmanager(string name) {
super(name);
}

@override
void handleleavenotes(leavenote note) {
//假如小于3天部门经理有权限
if(note.getdays()<3){
system.out.println("批准假条: "+ note.getname());
}else{
//否则移交到上级领导
this.next.handleleavenotes(note);
}
}
}

  

/**
* 经理
*/
public class manager extends leader {
public manager(string name) {
super(name);
}

@override
void handleleavenotes(leavenote note) {
//假如大于3天小于7天经理有权限
if (note.getdays() >= 3 && note.getdays() <= 7) {
system.out.println("批准假条: " + note.getname());
} else {
//否则移交到老板
this.next.handleleavenotes(note);
}
}
}

  

/**
* 老板
*/
public class boss extends leader {

public boss(string name) {
super(name);
}

@override
void handleleavenotes(leavenote note) {
system.out.println("批准假条: "+ note.getname());
}
}

  

public class client {
    public static void main(string[] args) {
        //
        leavenote note = new leavenote();
        note.setdays(5);
//        note.setdays(10);
//        note.setdays(20);
        
        note.setname("tom");

        leader a = new departmanager("部门领导");
        leader b = new manager("总经理");
        leader c = new departmanager("老板");

        //责任链关系
        a.setnext(b);
        b.setnext(c);
        //处理请假业务
        a.handleleavenotes(note);
    }
}

  责任链模式在处理这种多级业务时可以很好使代码解耦。想新增责任处理对象时只需要增加责任处理对象,不需要更改原来的业务员代码,更加不需要写if..else.

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网