1、简单介绍
职责链模式(称责任链模式)将请求的处理对象像一条长链一般组合起来,形成一条对象链。请求并不知道具体执行请求的对象是哪一个,这样就实现了请求与处理对象之间的解耦。
2、主要涉及到的角色
-
抽象处理者(Handler)角色:抽象处理者用于定义出一个处理请求的接口,如果需要,接口可以定义出一个方法,以返回对下一个处理对象的引用。上面例子中的Approver就是代表的这个角色。
-
具体处理者(ConcreteHandler)角色:处理接到的请求,可以选择将请求处理掉,或者将请求传递给下家。上面的例子中的Manager和TechnicalDirector以及CEO就是代表的这个角色。
3、案例分析(公司文件审批)
1)抽象处理者(Handler)
public abstract class Review {
private Review review;
public void setNextUser(Review review) {
this.review = review;
}
public Review getNextUser() {
return review;
}
// 传递的过程
public abstract void handle(String str);
}
2)具体处理者
//部门经理
public class DepartmentManager extends Review {
@Override
public void handle(String str) {
System.out.println(str + "DepartmentManager处理完成");
Review nextUser = getNextUser();
if (nextUser != null) {
nextUser.handle(str);
} else {
System.out.println(str + "通过");
}
}
}
//总经理
public class GeneralManager extends Review {
@Override
public void handle(String str) {
System.out.println(str + "GeneralManager处理完成");
Review nextUser = getNextUser();
if (nextUser != null) {
nextUser.handle(str);
} else {
System.out.println(str + "通过");
}
}
}
3)测试
public static void main(String[] args) {
DepartmentManager departmentManager = new DepartmentManager();
GeneralManager generalManager = new GeneralManager();
departmentManager.setNextUser(generalManager);
System.out.println("文件发起流程");
departmentManager.handle("文件");
}
4、总结
- 责任链模式的优点
1)、请求不需要指出被哪个对象处理了,这样的效果是请求者和接收者之间的解耦,而且链中的对象也不需要清楚其他链的结构,也降低了耦合。
2)、请求处理对象仅需要维护一个指向其后继者的的引用,而不需要维护所有的处理对象,简化了对象之间的相互连接。
3、在给对象分派职责时,职责链可以给我们更多的灵活性,可以通过在运行时对该链进行动态的增加或修改来增加或改变处理一个请求的职责。
4)、新增一个请求处理对象,不需要改动现有代码,只需要重新设置连接即可,符合“开闭原则”。
- 责任链模式的缺点
评论区