Android设计模式-责任链模式
2019-10-31 本文已影响0人
星宇V
UML关系简单介绍
UML简单使用的介绍
创建型设计模式
Android设计模式-单例模式
Android设计模式-工厂模式
Android设计模式-抽象工厂模式
Android设计模式-建造者模式
Android设计模式-原型模式
结构型设计模式
Android设计模式-代理模式
Android设计模式-装饰模式
Android设计模式-适配器模式
Android设计模式-组合模式
Android设计模式-门面模式
Android设计模式-桥接模式
Android设计模式-享元模式
行为型设计模式
Android设计模式-策略模式
Android设计模式-命令模式
Android设计模式-责任链模式
Android设计模式-模版方法模式
Android设计模式-迭代器模式
Android设计模式-观察者模式
Android设计模式-备忘录模式
Android设计模式-中介者模式
Android设计模式-访问者模式
Android设计模式-状态模式
Android设计模式-解释器模式
1.定义
使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它位置。
责任链模式UML图
责任链模式UML图角色介绍
- Handler 抽象处理者,抽象出问题处理的方法,并持有下一个处理者的引用
- ConcreteHandler 具体处理者,继承抽象,并实现具体的方法
- Client 客户端,调用的地方0.0
责任链的核心在具体处理者上,链是由多个具体处理者组成的。
3.简单实现
3.1抽象处理者
public abstract class Handler {
private Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
//此处结合了模版方法模式,后续介绍
public final void handlerMessage(String request){
//此处的判断逻辑根据具体的业务修改,这里就是做个简单的示范
if (request.contains("111")){
System.out.println("本节点处理");
dealMessage();
}else {
if (this.nextHandler!=null){
System.out.println("传递到了下一节点");
this.nextHandler.handlerMessage(request);
}else {
System.out.println("没有下一节点了。。。怎么处理看具体业务了");
}
}
}
public abstract void dealMessage();
}
3.2具体处理者
public class ConcreteHandler1 extends Handler {
@Override
public void dealMessage() {
System.out.println("节点1处理了任务");
}
}
public class ConcreteHandler2 extends Handler {
@Override
public void dealMessage() {
System.out.println("节点2处理了任务");
}
}
3.3客户端调用
public class MyClass {
public static void main(String args[]) {
//一般关于链的设置也不会在高层模块中设置,此处是做个示范
Handler handler1=new ConcreteHandler1();
Handler handler2=new ConcreteHandler2();
handler1.setNextHandler(handler2);
handler1.handlerMessage("111111");
System.out.println("---------分割线--------");
handler1.handlerMessage("222222");
}
}
打印结果
本节点处理
节点1处理了任务
---------分割线--------
传递到了下一节点
没有下一节点了。。。怎么处理看具体业务了
具体使用中,一般关于链的设置也不会在高层模块中设置,而是封装出一个封装类,在需要使用的时候返回链的第一个节点对象即可正常使用。
4.总结
- 优点 将请求和处理分开,请求者不用直到是谁处理的,处理者不用直到请求的全貌,两者解耦,提高了系统的灵活性。
- 缺点 链条特长的时候很麻烦吧。。毕竟类似于递归