`
Flyingh
  • 浏览: 18296 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Chain Of Responsibility

 
阅读更多

Chain Of Responsibility Pattern:很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任。

1).

Handler.java

 

package com.flyinh.ihandler;

public interface Handler {
	void handleRequest(String str);
}

 

 HandlerA.java

 

package com.flyingh.handler;

import com.flyinh.ihandler.Handler;

public class HandlerA implements Handler {
	private Handler successor;

	public HandlerA(Handler successor) {
		super();
		this.successor = successor;
	}

	@Override
	public void handleRequest(String str) {
		// TODO Auto-generated method stub
		if(str.equals("A")){
			System.out.println("HandlerA.handleRequest()");
		}else{
			successor.handleRequest(str);
		}
	}

}

 

 HandlerB.java

 

package com.flyingh.handler;

import com.flyinh.ihandler.Handler;

public class HandlerB implements Handler {
	private Handler successor;

	public HandlerB(Handler successor) {
		super();
		this.successor = successor;
	}

	@Override
	public void handleRequest(String str) {
		// TODO Auto-generated method stub
		if (str.equals("B")) {
			System.out.println("HandlerB.handleRequest()");
		} else {
			successor.handleRequest(str);
		}
	}

}

 

 HandlerC.java

 

package com.flyingh.handler;

import com.flyinh.ihandler.Handler;

public class HandlerC implements Handler {
	private Handler successor;

	public HandlerC(Handler successor) {
		super();
		this.successor = successor;
	}

	@Override
	public void handleRequest(String str) {
		// TODO Auto-generated method stub
		if (str.equals("C")) {
			System.out.println("HandlerC.handleRequest()");
		} else {
			successor.handleRequest(str);
		}
	}

}

 

 OtherHandler.java

 

package com.flyingh.handler;

import com.flyinh.ihandler.Handler;

public class OtherHandler implements Handler {

	@Override
	public void handleRequest(String str) {
		// TODO Auto-generated method stub
		System.out.println("OtherHandler.handleRequest()");
	}

}

 

 Client.java

 

package com.flyingh.client;

import com.flyingh.handler.HandlerA;
import com.flyingh.handler.HandlerB;
import com.flyingh.handler.HandlerC;
import com.flyingh.handler.OtherHandler;
import com.flyinh.ihandler.Handler;

public class Client {
	public static void main(String[] args) {
		Handler handler = new HandlerA(new HandlerC(new HandlerB(
				new OtherHandler())));
		handler.handleRequest("B");
		System.out.println("************");
		handler.handleRequest("C");
		System.out.println("************");
		handler.handleRequest("A");
		System.out.println("************");
		handler.handleRequest("D");
	}
}

 

 程序运行结果如下:

 

HandlerB.handleRequest()
************
HandlerC.handleRequest()
************
HandlerA.handleRequest()
************
OtherHandler.handleRequest()

 2).

Handler.java

 

package com.flyingh.ihandler;

import com.flyingh.irequest.Request;

public interface Handler {
	void handleRequest(Request request);
}

 Request.java

 

package com.flyingh.irequest;

public interface Request {

}

 RequestA.java

 

package com.flyingh.request;

import com.flyingh.irequest.Request;

public class RequestA implements Request {

}

 RequestB.java

 

package com.flyingh.request;

import com.flyingh.irequest.Request;

public class RequestB implements Request {

}

 RequestC.java

 

package com.flyingh.request;

import com.flyingh.irequest.Request;

public class RequestC implements Request {

}

 OtherRequest.java

 

package com.flyingh.request;

import com.flyingh.irequest.Request;

public class OtherRequest implements Request {

}

 HandlerA.java

 

package com.flyingh.handler;

import com.flyingh.ihandler.Handler;
import com.flyingh.irequest.Request;
import com.flyingh.request.RequestA;

public class HandlerA implements Handler {
	private Handler successor;

	public HandlerA(Handler successor) {
		super();
		this.successor = successor;
	}

	@Override
	public void handleRequest(Request request) {
		// TODO Auto-generated method stub
		if (request instanceof RequestA) {
			System.out.println("HandlerA.handleRequest()");
		} else {
			successor.handleRequest(request);
		}
	}

}

 HandlerB.java

 

package com.flyingh.handler;

import com.flyingh.ihandler.Handler;
import com.flyingh.irequest.Request;
import com.flyingh.request.RequestB;

public class HandlerB implements Handler {
	private Handler successor;

	public HandlerB(Handler successor) {
		super();
		this.successor = successor;
	}

	@Override
	public void handleRequest(Request request) {
		// TODO Auto-generated method stub
		if (request instanceof RequestB) {
			System.out.println("HandlerB.handleRequest()");
		} else {
			successor.handleRequest(request);
		}
	}

}

 HandlerC.java

 

package com.flyingh.handler;

import com.flyingh.ihandler.Handler;
import com.flyingh.irequest.Request;
import com.flyingh.request.RequestC;

public class HandlerC implements Handler {
	private Handler successor;

	public HandlerC(Handler successor) {
		super();
		this.successor = successor;
	}

	@Override
	public void handleRequest(Request request) {
		// TODO Auto-generated method stub
		if (request instanceof RequestC) {
			System.out.println("HandlerC.handleRequest()");
		} else {
			successor.handleRequest(request);
		}
	}

}

 OtherHandler.java

 

package com.flyingh.handler;

import com.flyingh.ihandler.Handler;
import com.flyingh.irequest.Request;

public class OtherHandler implements Handler {

	@Override
	public void handleRequest(Request request) {
		// TODO Auto-generated method stub
		System.out.println("OtherHandler.handleRequest()");
	}

}

Client.java

package com.flyingh.client;

import com.flyingh.handler.HandlerA;
import com.flyingh.handler.HandlerB;
import com.flyingh.handler.HandlerC;
import com.flyingh.handler.OtherHandler;
import com.flyingh.ihandler.Handler;
import com.flyingh.irequest.Request;
import com.flyingh.request.OtherRequest;
import com.flyingh.request.RequestA;
import com.flyingh.request.RequestB;
import com.flyingh.request.RequestC;

public class Client {
	public static void main(String[] args) {
		Handler handler = new HandlerA(new HandlerC(new HandlerB(
				new OtherHandler())));
		Request requestB = new RequestB();
		handler.handleRequest(requestB);
		System.out.println("***************");
		Request requestA = new RequestA();
		handler.handleRequest(requestA);
		System.out.println("***************");
		Request requestC = new RequestC();
		handler.handleRequest(requestC);
		System.out.println("***************");
		Request otherRequest = new OtherRequest();
		handler.handleRequest(otherRequest);

	}
} 

程序运行结果如下:

HandlerB.handleRequest()
***************
HandlerA.handleRequest()
***************
HandlerC.handleRequest()
***************
OtherHandler.handleRequest() 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Chain of Responsibility模式

    **Chain of Responsibility模式详解** Chain of Responsibility模式是GOF(GoF,Gang of Four)在他们的经典著作《设计模式:可复用面向对象软件的基础》中提出的23种设计模式之一,属于行为模式类别。这个模式的...

    Chain Of Responsibility模式

    **Chain of Responsibility 模式详解** Chain of Responsibility(责任链)模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,每个对象都可以处理请求或将其传递给链中的下一个对象。这种模式常...

    chain of responsibility.pptx

    责任链模式(Chain of Responsibility Pattern)是一种常见的行为模式。 使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一条链,并沿着这条链一直传递该请求,直到有...

    Chain of Responsibility 职责链模式

    C#面向对象设计模式 Chain of Responsibility 职责链模式 视频讲座下载

    (行为型模式) Chain Of Responsibility 职责链模式

    ### (行为型模式) Chain Of Responsibility 职责链模式 #### 李建忠 jianzhong.lee@gmail.com #### 设计模式论坛: forum.softcompass.com #### 上海祝成科技高级培训讲师 www.softcompass.com #### 请求的发送者...

    c++-设计模式之责任链模式(Chain of Responsibility Pattern)

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将请求的发送者和接收者解耦。通过将请求沿着处理链传递,直到有对象处理该请求为止,这种模式避免了请求发送者与具体处理者之间的紧...

    设计模式C++学习之责任链模式(Chain of Responsibility)

    责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。这种模式的主要优点是解耦了发送者和接收者之间的关系,使得系统更加灵活,...

    chain of responsibility 职责链模式(行为模式)

    职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求的发送者和接收者解耦,使得多个对象都有可能处理一个请求,而无需显式指定接收者。在这个模式中,请求沿着一个处理者链进行传递,...

    C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Responsibility 职责链模式

    职责链模式(Chain of Responsibility)是一种行为型设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。在C#中,职责链模式的应用可以帮助我们构建灵活、可扩展的系统,减少对象...

    java设计模式之责任链(chain of responsibility)

    责任链(Chain of Responsibility)模式是一种行为设计模式,它允许我们向对象链中传递请求,让每个对象决定是否处理这个请求。在Java中,这种模式常用于事件处理、日志系统或者权限控制等场景,其核心思想是将处理...

    C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) (Level 300)

    职责链模式(Chain of Responsibility)是一种行为型设计模式,它允许你将请求沿着处理者对象的链进行传递,直到某个对象处理该请求。在C#编程中,职责链模式能够帮助我们实现一种松耦合的架构,使得请求的发送者和...

    【Java设计模式】(3)责任链Chain of Responsibility

    **Java设计模式——责任链(Chain of Responsibility)** 在软件工程中,设计模式是一种解决常见问题的可重用解决方案。责任链模式是行为设计模式之一,它的主要思想是将请求的发送者和接收者解耦,通过将多个处理...

    C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式)

    ### C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) #### 概述 在本篇文章中,我们将深入探讨C#中的Chain of Responsibility(职责链)模式,这是行为型设计模式的一种。虽然标题...

    Chain of Responsibility.zip

    设计模式-责任链的演示项目,导入eclipse中可直接运行,编程语言:java 设计模式学习请参考博客 https://www.li-tian.net.cn/archives/2020-01-27-23-01-15

    04-Chain Of Responsibility.rar

    System.out.println("Department Manager approved the request of $" + amount); } else if (successor != null) { successor.approve(amount); } } } // 类Director和CEO类似,根据审批额度决定是否批准或...

    设计模式 - Chain of Responsibility Pattern(责任链模式)

    NULL 博文链接:https://linkcqu.iteye.com/blog/355806

    Java设计模式之责任链模式(Chain of Responsibility模式)介绍

    责任链模式(Chain of Responsibility,CoR)是一种行为设计模式,它允许将请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。每个处理者对象都包含对下一个处理者的引用,如果当前处理者无法处理...

    php设计模式 Chain Of Responsibility (职责链模式)

    **PHP设计模式:Chain Of Responsibility(职责链模式)** 职责链模式是一种行为设计模式,它的主要目的是解耦请求的发送者和接收者,通过创建一个处理请求的对象链,使得多个对象都有机会处理这个请求。在PHP中,...

    commons-chain-1.1-src.zip

    1. **Chain of Responsibility模式**:Commons Chain 是对Chain of Responsibility设计模式的一个实现。在这个模式中,多个对象形成一个链,每个对象都可以处理请求,或者将请求传递给链上的下一个对象。这种模式...

Global site tag (gtag.js) - Google Analytics