说责任链之前,我们先来说责任。责任就是一件事情由谁处理,出了问题由谁负责。无论公司还是政府,都是层层管理的,上面不处理就交给下面。这就形成了一个责任链条, 现在的触屏设备的点击事件也是一样。一般都采用责任链模式,大控件不处理就转给小控件。代码如下:
public class ResponsibilityChain {
public static abstract class Widget {
// 持有后面的责任对象
protected Widget childWidget;
// 示意处理请求的方法,可以传参
public abstract void onclick();
public Widget getChildWidget() {
return childWidget;
}
public void setChildWidget(Widget childWidget) {
this.childWidget = childWidget;
}
}
//具体处理者角色
public static class ConcreteWidget extends Widget {
// 事件处理方法
@Override
public void onclick() {
//判断后面是否有要责任对象,没有则处理,有则向后传
if (getChildWidget() != null) {
System.out.println("放过请求");
getChildWidget().onclick();
} else {
System.out.println("处理请求");
}
}
}
public static void main(String[] args) {
//组装责任链
Widget widget1 = new ConcreteWidget();
Widget widget2 = new ConcreteWidget();
widget1.setChildWidget(widget2);
//事件产生
widget1.onclick();
}
}
觉得容易理解的话面向对象的23种设计模式点这里