菜鸟硕枫设计模式系列之14 职责链模式

职责链模式是保证一个事件一定能够被处理的一种模式。比如:一个coder去请假,temLeader批5天一下的,Manager批10天的,就这么简单。职责链模式是一种行为模式。

职责链模式类图:
[img]http://dl.iteye.com/upload/attachment/364668/53040d7b-7b4a-3089-8bd4-83a72de64730.jpg[/img]

说明:
Coder发出Something请求,经过TeamLeader->Manager构成的链,如果TeamLeader能处理,就返回结果,不能则有Manager处理。变化之处在于,当TeamLeader不在时(也可以是因为某种原因这里down掉了),则由链中其他环节去处理了,这样就保证了请求一定能被处理,增强了系统的健壮性。


具体代码:


package chainOfResponsibilityPattern;

public class Something {
private String name;
private int days;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getDays() {
return days;
}
public void setDays(int days) {
this.days = days;
}

}

抽象人

package chainOfResponsibilityPattern;

public abstract class Person {

private Something something;
private boolean isHere;//上班标志位

public abstract void request(Something something,Person toperson);
public abstract void response(Person person);

public Something getSomething() {
return something;
}
public void setSomething(Something something) {
this.something = something;
}
public boolean isHere() {
return isHere;
}
public void setHere(boolean isHere) {
this.isHere = isHere;
}

}


manager:

package chainOfResponsibilityPattern;

public class Manager extends Person{

@Override
public void request(Something something, Person toperson) {
// TODO Auto-generated method stub

}

@Override
public void response(Person person) {
if(person.getSomething().getDays()<10&&this.isHere()){
System.out.println("Manager deal with it");
System.out.println("Agree");
}else{
System.out.println("Disagree");
}
}

}


码农:

package chainOfResponsibilityPattern;

public class Coder extends Person{

private Something something;
private Person leader;

public Person getLeader() {
return leader;
}

public void setLeader(Person leader) {
this.leader = leader;
}

public Something getSomething() {
return something;
}

public void setSomething(Something something) {
this.something = something;
}

@Override
public void response(Person person) {
// TODO Auto-generated method stub

}
@Override
public void request(Something something,Person toPerson) {

System.out.println("For "+something.getName()+" ask for a " +
"leave of about "+something.getDays()+" days");

leader.response(Coder.this);
}

}


TeamLeader

package chainOfResponsibilityPattern;

public class TeamLeader extends Person{

private Person leader;
private boolean isHere;

public Person getLeader() {
return leader;
}

public void setLeader(Person leader) {
this.leader = leader;
}


@Override
public void response( Person person) {
if(person.getSomething().getDays()<5 && this.isHere){
System.out.println("Agree");
}else{
System.out.println("TeamLeader can not deal,send it to Manager");
leader.response(person);
}

}

@Override
public void request(Something something, Person toperson) {


}


}


测试类:

package chainOfResponsibilityPattern;

public class ChainOfResponsibilityTest {

public static void main(String[] args){
Something something = new Something();
something.setDays(4);
something.setName("nothing");

Coder coder = new Coder();
coder.setSomething(something);


TeamLeader teamLeader = new TeamLeader();
Person manager = new Manager();

manager.setHere(true);
teamLeader.setHere(true);
teamLeader.setLeader(manager);
coder.setLeader(teamLeader);

coder.request(something, teamLeader);

teamLeader.setHere(false);
manager.setHere(true);
coder.setSomething(something);
coder.request(something, teamLeader);


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值