package china.of.responsibility.pattern;

public abstract class Handler {
protected Handler successor;
protected String name;

public Handler(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setSuccessor(Handler succHandler){
this.successor=succHandler;
}
public abstract void exect(Request request);

}


package china.of.responsibility.pattern;

public class Request {
private String name;
private int count;
private String purpose;

public Request(String name,int count,String purpose){
this.name=name;
this.count=count;
this.purpose=purpose;
}
//省略get/set方法
}


package china.of.responsibility.pattern;

public class Handler_Lev1 extends Handler{

public Handler_Lev1(String name) {
super(name);
// TODO Auto-generated constructor stub
}

@Override
public void exect(Request request) {
if (request.getCount()<50) {
System.out.println(this.name+"同意买"+
request.getCount()+"件"+request.getName());
}
else {
this.successor.exect(request);
}
}
}
package china.of.responsibility.pattern;

public class Handler_Lev2 extends Handler{

public Handler_Lev2(String name) {
super(name);
// TODO Auto-generated constructor stub
}

@Override
public void exect(Request request) {
if (request.getCount()<100) {
System.out.println(this.name+"同意买"+
request.getCount()+"件"+request.getName());
}
else if(request.getCount()<120&&this.name=="杨过他媳妇 小龙女"){
System.out.println(this.name+"同意买"+
request.getCount()+"件"+request.getName());
}
else {
successor.exect(request);
}
}
}



package china.of.responsibility.pattern;

public class Handler_Lev3 extends Handler{

public Handler_Lev3(String name) {
super(name);
// TODO Auto-generated constructor stub
}

@Override
public void exect(Request request) {
if (request.getCount()<150) {
System.out.println(this.name+"同意买"+
request.getCount()+"件"+request.getName());
}
else {
System.out.println("拒绝买"+request.getCount()+"件"
+request.getName());
}

}
}


package china.of.responsibility.pattern;


public class Client {
public static void main(String[] args) {
Handler lev1,lev2,lev2_5,lev3;
lev1=new Handler_Lev1("张无忌");
lev2=new Handler_Lev2("杨过");
lev2_5=new Handler_Lev2("杨过他媳妇 小龙女");
lev3=new Handler_Lev3("黄药师");

Request request1=new Request("屠龙刀",20, "倚天屠龙记");
Request request2=new Request("玄铁剑",115, "神雕侠侣");
Request request3=new Request("碧玉箫",125, "射雕英雄传");
Request request4=new Request("九阴真经",170, "射雕英雄传");

lev1.setSuccessor(lev2);
lev2.setSuccessor(lev2_5);
lev2_5.setSuccessor(lev3);

lev1.exect(request1);
lev1.exect(request2);
lev1.exect(request3);
lev1.exect(request4);
}
}


测试结果

张无忌同意买20件屠龙刀
杨过他媳妇 小龙女同意买115件玄铁剑
黄药师同意买125件碧玉箫
拒绝买170件九阴真经



本文将一下两篇资料的特点组合了一下

包括 责任链可以不从链的起始点开始

和 每个处理者可以把请求交给自己的同级者而不一定是上级