应用场景
http web请求处理,请求过来后将经过转码、解析、参数封装、鉴权等一系列的处理(责任),而且要经过多少处理是可以灵活调整的
那么该怎么做呢?
将所有的处理都写在一个类中行不行呢?
分成多个类又该如何灵活的组合在一起呢?
简单示例
Request类:
public interface Request{
//do something...
}
复制代码
ResponsibilityChain类:
public class ResponsibilityChain{
private List responsibilityList = new ArrayList<>();
private Integer index = 0;
public void process(Request request){
if (this.index < responsibilityList.size()) {
this.responsibilityList.get(index++).process(request, this);
}
}
/** 加入链中 */
public void register(Responsibility responsibility){
this.responsibilityList.add(responsibility);
}
}
复制代码
Responsibility接口:
public interface Responsibility{
void process(Request request, ResponsibilityChain chain);
}
复制代码
Responsibility实现类:
public class ResponsibilityA implements Responsibility{
@Override
public void process(Request request, ResponsibilityChain chain){
System.out.println("转码");
chain.process(request);
}
}
复制代码
public class ResponsibilityB implements Responsibility{
@Override
public void process(Request request, ResponsibilityChain chain){
System.out.println("解析");
chain.process(request);
}
}
复制代码
public class ResponsibilityC implements Responsibility{
@Override
public void process(Request request, ResponsibilityChain chain){
System.out.println("参数封装");
chain.process(request);
}
}
复制代码
public class ResponsibilityD implements Responsibility{
@Overr