设计模式之责任链模式
1.责任链模式的定义是什么?
答:很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。
2.使用责任链的原则是什么?
答:分为两个,第一很多对象只为了处理一个事情。第二这些对象需要形成一条链结构,也就是对象之间的相互调用顺序需要事先匹配好。
3.举一个责任链的例子并附上代码
下面是一个关于投诉的责任链模式的例子,这条链是客服人员->技术人员->经理,也就是客服解决不了转给技术人员,技术人员解决不了转给经理,经理解决不了那你就是解决不了!
package com.eill.vigny.purchaser.service.impl;
/**
* @Author: 张小乙
* @Date: 2019/1/20 13:36
* @Version: 1.0
* @Description: 1.0
*/
public class ComplaintHandlerTest {
public static abstract class ComplaintHandler {
private ComplaintHandler successor;
public abstract void dispose(String thing);
public ComplaintHandler getSuccessor() {
return successor;
}
public void setSuccessor(ComplaintHandler successor) {
this.successor = successor;
}
}
public static class CustomerServiceHandler extends ComplaintHandler {
@Override
public void dispose(String thing) {
if ("1".equals(thing)) {
System.out.println("我是客户,已处理这个问题!");
return;
}
super.getSuccessor().dispose(thing);
}
}
public static class TechnicianHandler extends ComplaintHandler {
@Override
public void dispose(String thing) {
if ("2".equals(thing)) {
System.out.println("我是技术,已处理这个问题!");
return;
}
super.getSuccessor().dispose(thing);
}
}
public static class ManagerHandler extends ComplaintHandler {
@Override
public void dispose(String thing) {
if ("3".equals(thing)) {
System.out.println("我是经理,已处理这个问题");
return;
}
System.out.println("你的问题无法处理,请谅解!");
}
}
public static ComplaintHandler findHandler() {
ComplaintHandler cusomerService = new CustomerServiceHandler();
ComplaintHandler technician = new TechnicianHandler();
cusomerService.setSuccessor(technician);
ComplaintHandler manager = new ManagerHandler();
technician.setSuccessor(manager);
return cusomerService;
}
public static void main(String[] args) {
ComplaintHandler handler = findHandler();
handler.dispose("3");
}
}