您的位置:首页 > 其它

设计思想学习—职责链模式

2018-01-07 19:02 441 查看

职责链模式

职责链模式(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);
}
}


输出:

交给二级处理

第二级:处理请求

为了省事儿,这里只弄了两级,现实中有几级可以弄几级直到处理为止。

其实所有的设计模式都没有研究很深,因为目标只是认识知道,往后会慢慢加深印象理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息