职责链模式
职责链模式(Chain of Responsibility):使多个对象都有机会处理求情,从而避免求情的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。
职责链也是一个很简单的模式,就像糖葫芦一样穿成一串一个个来,而且组成也很简单就两部分
职责链模式构成:
抽象处理者(Handler)角色:定义出一个处理请求的接口。
具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
UML
因为很容易理解所以就没有研究太多,直接上代码
abstract class Handler {
//持有后继的责任对象
protected Handler successor;
//示意处理请求的方法
public abstract void handleRequest(int num);
//赋值方法,设置后继的责任对象
public abstract void setSuccessor(Handler successor);
}
class ConcreteHandler extends Handler {
private Handler successor;
//处理方法,调用此方法处理请求
@Override
public void handleRequest(int num) {
//判断是否在处理范围之内
if(num == 1){
System.out.println("第一级:处理请求");
}else{
System.out.println("交给二级处理");
if(successor!=null){
successor.handleRequest(num);
}
}
}
@Override
public void setSuccessor(Handler successor) {
this.successor=successor;
}
}
class ConcreteHandler2 extends Handler {
private Handler successor;
//处理方法,调用此方法处理请求
@Override
public void handleRequest(int num) {
//判断是否在处理范围之内
if(num == 2){
System.out.println("第二级:处理请求");
}else{
System.out.println("交给三级处理");
if(successor!=null){
successor.handleRequest(num);
}
}
}
@Override
public void setSuccessor(Handler successor) {
this.successor=successor;
}
}
public class Client {
public static void main(String[] args) {
ConcreteHandler one=new ConcreteHandler();
ConcreteHandler2 two=new ConcreteHandler2();
one.setSuccessor(two);
one.handleRequest(2);
}
}
输出:
交给二级处理
第二级:处理请求
为了省事儿,这里只弄了两级,现实中有几级可以弄几级直到处理为止。
其实所有的设计模式都没有研究很深,因为目标只是认识知道,往后会慢慢加深印象理解。