职责链模式(称责任链模式)将请求的处理对象像一条长链一般组合起来,形成一条对象链。请求并不知道具体执行请求的对象是哪一个,这样就实现了请求与处理对象之间的解耦。
领导抽象类:Lingdao
//@author v: jbossjf
public abstract class Lingdao {
private Lingdao nextLingdao;
public Lingdao getNextLingdao() {
return nextLingdao;
}
public void setNextLingdao(Lingdao nextLingdao) {
this.nextLingdao = nextLingdao;
}
abstract void chuli(Files file);
}
领导实现类:Zongjingli、Fujingli、Bumenjingli
/**
* 总经理
*/
public class Zongjingli extends Lingdao {
private final String name = "总经理";
private final int level = 0;//最大
@Override
public void chuli(Files file) {
if(this.level > file.getLevel()){
System.out.println(name + "未处理文件《" + file.getFileName() + "》");
getNextLingdao().chuli(file);
}else{
System.out.println(name + "处理了文件《" + file.getFileName() + "》");
}
}
}
/**
* 副经理
*/
public class Fujingli extends Lingdao {
private final String name = "副经理";
private final int level = 1;
@Override
public void chuli(Files file) {
if(this.level > file.getLevel()){
System.out.println(name + "未处理文件《" + file.getFileName() + "》");
getNextLingdao().chuli(file);
}else{
System.out.println(name + "处理了文件《" + file.getFileName() + "》");
}
}
}
/**
* 部门经理
*/
public class Bumenjingli extends Lingdao{
private final String name = "部门经理";
private final int level = 2;
@Override
public void chuli(Files file) {
if(this.level > file.getLevel()){
System.out.println(name + "未处理文件《" + file.getFileName() + "》");
getNextLingdao().chuli(file);
}else{
System.out.println(name + "处理了文件《" + file.getFileName() + "》");
}
}
}
文件类:Files
public class Files {
private String fileName;
private int level;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
}
测试类:Clienter
public class Clienter {
public static void main(String[] args) {
//定义职责链
Lingdao zongjingli = new Zongjingli();
Lingdao fujingli = new Fujingli();
Lingdao bumenjingli = new Bumenjingli();
bumenjingli.setNextLingdao(fujingli);
fujingli.setNextLingdao(zongjingli);
//定义两份文件
Files f1 = new Files();
f1.setFileName("正确对待旱鸭子");
f1.setLevel(1);
Files f2 = new Files();
f2.setFileName("年会在那里举行");
f2.setLevel(0);
//提交文件
bumenjingli.chuli(f1);
bumenjingli.chuli(f2);
}
}
结果:
部门经理未处理文件《正确对待旱鸭子》
副经理处理了文件《正确对待旱鸭子》
部门经理未处理文件《年会在那里举行》
副经理未处理文件《年会在那里举行》
总经理处理了文件《年会在那里举行