您的位置:首页 > 其它

设计模式中的车轮战-责任链模式

2018-01-11 10:54 211 查看
责任链模式在Android中的应用莫过于事件分发了,ViewGroup对事件分别给子View,从ViewTree的顶部至上而下地进行处理,直到事件被消化为止,这种方法在Android广播中也能看到

责任链模式的实现分为以下几个部分

请求者

public  class Request {
private Object object;
private int RequestLevel;
public Request(Object object,int requestLevel) {
this.object = object;
this.RequestLevel = requestLevel;
}

public Object getObject() {
return object;
}

public int getRequestLevel() {
return RequestLevel;
}
}


这里的object在实际开发当中我们可以换成其他自定义的对象,如Android中的Message和Handler那样

抽象处理者

public abstract class AbstractHandler {
private AbstractHandler nextHandler;
public final void handleRequest(Request request) {
if (getHandlerLevel() == request.getRequestLevel()) {
handle(request);
} else {
if (nextHandler != null) {
nextHandler.handleRequest(request);
} else {
System.out.println("No handler can handle it!");
}
}
}

public void setNextHandler(AbstractHandler nextHandler) {
this.nextHandler = nextHandler;
}

protected abstract int getHandlerLevel();

protected abstract void handle(Request request);
}


处理者

处理者1

public class Handler1 extends AbstractHandler {
@Override
protected void handle(Request request) {
System.out.println("handler1 handle it");
}
@Override
protected int getHandlerLevel() {
return 1;
}
}


处理者2

public class Handler2 extends AbstractHandler {
@Override
protected int getHandlerLevel() {
return 2;
}

@Override
protected void handle(Request request) {
System.out.println("handler2 handle it");
}
}


使用

public class Main {
public static void main(String[] args) {
AbstractHandler handler1 = new Handler1();
AbstractHandler handler2 = new Handler2();
handler1.setNextHandler(handler2);
Request request = new Request("request",2);
handler1.handleRequest(request);
}
}


这样处理事件就会沿着责任链一个个下去,直到被处理者处理或没有处理者为止
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: