- 浏览: 370358 次
- 性别:
- 来自: Alien
文章分类
最新评论
-
风一样的男人__:
[flash=200,200][url]引用[/url][/f ...
java线程内存模型,线程、工作内存、主内存 -
极乐君:
厉害了,,,请问可以转载到我们专栏吗?会注明来源和地址的~专栏 ...
java线程内存模型,线程、工作内存、主内存 -
zdd001:
Spring 线程池使用 -
zdd001:
Spring 线程池使用 -
u014663756:
看了三行就知道是我想要的!!
java线程内存模型,线程、工作内存、主内存
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。
图如下:
UML很简单,让我们先来看一个简单的例子。
四. 职责链模式应用之请假管理
请假这个事情,相信每个人都不陌生。
我们公司是个相对很宽松的公司。
在公司里,如果你的请假时间小于0.5天,那么只需要向项目经理打声招呼就OK了。
如果超过了0.5天,但是还小于2天,那么就要去找人事部处理,当然,这就要扣工资了。
如果超过了2天,你就需要去找总经理了,工资当然也玩完了。
那么,对于我们来说,这个流程就是这样的。
也就是这样一个过程,你需要和你的直接上级——项目经理去打交道,最终可能是项目经理给你回邮件,可能是人事部给你回邮件,也可能是总经理给你回邮件。内部的过程其实应该是个黑盒子,你并不知道内部的消息是如何处理的。你需要找到的,只是你想要第一个交付的对象而已。
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);
System.out.println("-----------");
//传入schoolmaster request
handler.handleRequest(schoolmasterReq);
System.out.println("-----------");
//传入president request
handler.handleRequest(presidentReq);
System.out.println("-----------");
}
}
=============== 10 end
发表评论
-
模板模式
2012-11-27 01:14 1085我们在看spring中有部分说到持久层,其中有个类Jdb ... -
访问者模式
2012-11-22 02:59 880访问者模式,顾名思义使用了这个模式后就可以在不修改 ... -
门面模式
2012-11-20 01:06 847外部与一个子系统的通信必须通过一个统一的门面(Facade)对 ... -
追MM与设计模式
2012-11-13 16:40 833创建型模式 1、FACT ... -
命令模式
2012-11-04 23:50 8001.概念 其实命令模式像很多设计模式一样——通过在你的请 ... -
享元模式
2012-10-24 15:06 832享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的 ... -
桥梁模式
2012-10-23 08:51 1203桥梁模式的用意是把抽象化与实现化脱耦。脱耦是说把抽象和实 ... -
组合模式
2012-10-23 10:07 972组合模式将对象以树形结构组织起来,以达成“部分-整体”的层次结 ... -
适配器模式
2012-10-23 10:46 859把一个类的接口变换成 ... -
原型模式。
2012-10-23 15:06 800创建型模式中还有一种与工厂方法模式完全不同的模式,就是原型 ... -
外观模式
2012-10-24 11:24 1025比如在玩“极品飞车”这款游戏,你只需要等待的就是倒计时 ... -
代理模式和动态代理
2012-10-24 11:24 990所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类, ... -
策略模式
2012-10-22 11:00 1061一.策略模式是对象的行为模式,用意是对一组算法的封装。动 ... -
装饰模式
2012-10-22 10:51 916装饰模式:给一个类添加一些额外的职责,并且在添加这些额外 ... -
java设计模式笔记(菜鸟篇)
2012-10-22 10:36 1173设计模式的分类:分布式编程模式,用户界面模式,数据模型模式三大 ... -
java 建造者模式
2012-10-22 10:19 1001java 建造者模式 建造模式的角色:1: ... -
单例模式
2012-10-22 09:56 967public class SingleTon(){ ... -
工厂方法模式与抽象工厂模式
2012-10-17 16:23 1045总结: 简单工厂模式: public inter ... -
观察者模式
2012-08-31 00:42 1052简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观 ... -
简单工厂模式与工厂方法模式
2012-08-30 23:49 15041:简单工厂模式 UML图: ...
相关推荐
职责链模式(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职责链模式的实现