[转载]java设计模式_职责链模式(带例子)
Chain of Responsibility模式(职责链)
Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Chain of Responsibility(职责链模式)模式便是其中一个.
Chain of Responsibility(CoR)职责链模式,CoR模式是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。
优点: 因为无法预知来自外界(客户端)的请求是属于哪种类型,每个类如果碰到它不能处理的请求只要放弃就可以。
缺点: 缺点是效率低,因为一个请求的完成可能要遍历到最后才可能完成;扩展性差,因为在CoR中,一定要有一个统一的接口Handler.局限性就在这里.
在此写了10个java类来描述说明Chain of Responsibility设计模式的实现方式;
1、 Handler.java 请求处理类接口
2、 HandlerStudent.java 学生请求处理类
3、 HandlerTeacher.java 老师请求处理类
4、 HandlerSchoolmaster.java 校长请求处理类
5、 Request.java 请求类接口
6、 RequestStudent.java 学生请求类
7、 RequestTeacher.java 老师请求类
8、 RequestSchoolmaster.java 校长请求类
9、 RequestPresident.java 总统请求类
10、TestCoR.java 带有main方法的测试类
=============== 1、 Handler.java
package cor;
public interface Handler {
public void handleRequest(Request request);
}
=============== 1 end
=============== 2、 HandlerStudent.java
package cor;
public class HandlerStudent implements Handler {
//下一个Handler对象
private Handler nextSuccessor;
public HandlerStudent(Handler nextSuccessor) {
this.nextSuccessor = nextSuccessor;
}
public void handleRequest(Request request) {
//处理 StudentRequest
if(request.getType().equalsIgnoreCase("StudentRequest")){
System.out.println("HandlerStudent begin to response StudentRequest;");
request.execute();
//把请求传递给其它受理者
}else{
if(this.nextSuccessor != null){
nextSuccessor.handleRequest(request);
}else{
System.out.println("request[" + request.getType() + "] has not handler to deal!");
}
}
}
}
=============== 2 end
=============== 3、 HandlerTeacher.java
package cor;
public class HandlerTeacher implements Handler {
//下一个Handler对象
private Handler nextSuccessor;
public HandlerTeacher(Handler nextSuccessor) {
this.nextSuccessor = nextSuccessor;
}
public void handleRequest(Request request) {
//处理 TeacherRequest
if(request.getType().equalsIgnoreCase("TeacherRequest")){
System.out.println("HandlerTeacher begin to response StudentRequest;");
request.execute();
//把请求传递给其它受理者
}else{
if(this.nextSuccessor != null){
nextSuccessor.handleRequest(request);
}else{
System.out.println("request[" + request.getType() + "] has not handler to deal!");
}
}
}
}
=============== 3 end
=============== 4、 HandlerSchoolmaster.java
package cor;
public class HandlerSchoolmaster implements Handler {
//下一个Handler对象
private Handler nextSuccessor;
public HandlerSchoolmaster(Handler nextSuccessor) {
this.nextSuccessor = nextSuccessor;
}
public void handleRequest(Request request) {
//处理 SchoolmasterRequest
if(request.getType().equalsIgnoreCase("SchoolmasterRequest")){
System.out.println("HandlerSchoolmaster begin to response StudentRequest;");
request.execute();
//把请求传递给其它受理者
}else{
if(this.nextSuccessor != null){
nextSuccessor.handleRequest(request);
}else{
System.out.println("request[" + request.getType() + "] has not handler to deal!");
}
}
}
}
=============== 4 end
=============== 5、 Request.java
package cor;
public interface Request {
//请求类型
public String getType();
//执行任务
public void execute();
}
=============== 5 end
=============== 6、 RequestStudent.java
package cor;
public class RequestStudent implements Request {
public void execute() {
System.out.println("[RequestStudent] :t Students request has been accepted!");
}
public String getType() {
return "StudentRequest";
}
}
=============== 6 end
=============== 7、 RequestTeacher.java
package cor;
public class RequestTeacher implements Request {
public void execute() {
System.out.println("[RequestTeacher] :t Teachers request has been accepted!");
}
public String getType() {
return "TeacherRequest";
}
}
=============== 7 end
=============== 8、 RequestSchoolmaster.java
package cor;
public class RequestSchoolmaster implements Request {
public void execute() {
System.out.println("[RequestSchoolmaster] :t Schoolmasters request has been accepted!");
}
public String getType() {
return "SchoolmasterRequest";
}
}
=============== 8 end
=============== 9、 RequestPresident.java
package cor;
public class RequestPresident implements Request {
public void execute() {
System.out.println("[RequestPresident] :t Presidents request has been accepted!");
}
public String getType() {
return "PresidentRequest";
}
}
=============== 9 end
=============== 10、 TestCoR.java
package cor;
public class TestCoR {
public static void main(String[] args) {
Handler handler = new HandlerStudent(new HandlerTeacher(new HandlerSchoolmaster(null)));
Request studentReq = new RequestStudent();
Request teacherReq = new RequestTeacher();
Request schoolmasterReq = new RequestSchoolmaster();
Request presidentReq = new RequestPresident();
//传入student request
handler.handleRequest(studentReq);
System.out.println("-----------");
//传入teacher request
handler.handleRequest(teacherReq);//sun ex:首先会在 HandlerStudent中处理该请求,但由于HandlerStudent是处理StudentReq的,所以该请求并没有被处理,它会根据在创建HandlerStudent对象时传入的参数是哪个handler来pass给那个handler来处理,比如这里应该是new HandlerTeacher 这个handler
System.out.println("-----------");
//传入schoolmaster request
handler.handleRequest(schoolmasterReq);
System.out.println("-----------");
//传入president request
handler.handleRequest(presidentReq);
System.out.println("-----------");
}
}
=============== 10 end
相关推荐
职责链模式(ChainOfResponsibilityPattern)是一种行为设计模式,主要目的是通过建立一个处理请求的对象链,使得请求可以在链上的各个对象间传递,直到被某个对象处理。这种模式可以有效地解耦请求发起者和处理者,...
职责链模式(Chain of Responsibility)是一种行为设计模式,它的核心思想是将一系列处理请求的对象组织成一条链,每个对象都包含对请求的处理或传递的责任。在C++中实现职责链模式,我们可以创建一个抽象处理器类,...
职责链模式(Chain of Responsibility)是一种行为设计模式,它允许我们沿着对象链传递请求,让每个对象决定是否处理这个请求,或者将请求传递给链中的下一个对象。在C#中,我们可以利用类和接口来实现这种模式。让...
【职责链模式】是行为型模式的一种,其主要动机是解耦请求的发送者和处理者。在职责链中,多个对象可以接收并处理同一个请求,这些对象形成一条链,请求沿着链传递,直到某个对象负责处理。这种方式减少了对象间的...
职责链模式(Chain of Responsibility)是设计模式中的一种行为模式,它允许将请求沿着处理者对象的链式结构进行传递,直到某个对象决定处理这个请求。这种模式的主要优点在于可以解耦发送者和接收者,使得系统更加...
参考<大话设计模式>,采用python书写的模板类。职责链模式。
### Java设计模式详解:职责链模式 #### 行为型模式概述 行为型设计模式着重于定义对象间的职责分配及算法的抽象化。不同于结构型模式关注类和对象的组合,行为型模式更注重对象之间的交互与职责划分,强调的是在...
职责链模式是一种设计模式,它允许我们沿着一个对象链来传递请求,每个对象都可以处理请求,也可以将请求传递给链中的下一个对象。这种模式在处理事件流或责任分发时非常有用,它使得代码更加灵活,降低了耦合度。在...
职责链模式是一种行为设计模式,它允许我们定义一系列对象,这些对象可以按顺序处理请求,形成一条职责链。每个对象都是链上的一个节点,负责处理特定类型的请求或将其传递给链中的下一个对象。这种模式使得我们可以...
职责链模式是一种设计模式,它允许我们把请求沿着处理者对象的链条传递,直到某个对象决定处理这个请求。这种模式可以避免请求发送者与接收者之间的耦合,使得系统更具有弹性,因为添加新的处理者或者改变现有处理者...
职责链模式是一种行为设计模式,它允许我们定义一系列对象,这些对象可以按顺序接收请求,每个对象都可以处理请求或将其传递给链中的下一个对象。这种模式使得我们可以将请求的发送者与接收者解耦,同时增加了系统...
### (行为型模式) Chain Of Responsibility 职责链模式 #### 李建忠 jianzhong.lee@gmail.com #### 设计模式论坛: forum.softcompass.com #### 上海祝成科技高级培训讲师 www.softcompass.com #### 请求的发送者...
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 职责链模式的一个...
职责链模式是一种设计模式,它在软件工程中用于处理请求的传递和处理。这个模式的主要思想是将多个处理对象组织成一个链条,每个对象都包含对请求的一部分处理能力。当一个请求进入系统时,它会沿着这个链进行传递,...
### 201626705063梁艳萍职责链模式.pptx 知识点解析 #### 一、职责链模式简介 职责链模式是一种行为设计模式,其核心思想在于通过构建一系列处理对象并将这些对象串联成一条链路,使得一个请求可以在该链路上依次...
设计模式之职责链模式,这份文档以例子的形式讲诉了设计模式之职责链模式,希望可以帮助需要的人!
职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它使你能在不指定接收者的情况下,将请求沿着处理者链进行发送。每个处理者都包含对下一个处理者的引用,允许请求在链中传递,直到被某个处理者...
职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象处理该请求。这种模式的主要优点是解耦了发送者和接收者,使得系统更加灵活,可以动态...
职责链模式.cpp职责链模式的实现