(行为型模式六)责任链模式

package com.eyugame.modle;

/**
 * 责任链模式
 *
 * @author JYC506
 *
 */
/* 事件接收者 */
public abstract class EventReceiver {

	private EventReceiver nextEventReceiver;

	public void setNextHandler(EventReceiver nextEventReceiver) {
		this.nextEventReceiver = nextEventReceiver;
	}

	public Response handleRequest(Request request) {
		if (this.isOk(request)) {
			return this.getResponse();
		} else {
			if (this.nextEventReceiver != null) {
				return this.nextEventReceiver.handleRequest(request);
			} else {
				System.out.println("没有合适的事件接收者");
				return null;
			}
		}
	}

	public abstract Response getResponse();

	protected abstract boolean isOk(Request request);

	public static void main(String[] args) {
		/* 创建一个请求 */
		Request request = new Request(Command.EVENT2);
		/* 非责任链模式下的代码 */
		if (request.getCommand() == Command.EVENT1) {
			new EventReceiver1().handleRequest(request);
		} else if (request.getCommand() == Command.EVENT2) {
			new EventReceiver2().handleRequest(request);
		} else if (request.getCommand() == Command.EVENT3) {
			new EventReceiver3().handleRequest(request);
		} else if (request.getCommand() == Command.EVENT4) {
			new EventReceiver4().handleRequest(request);
		}
		/* 责任链模式下的代码 */
		/* 是不是责任链模式比较清晰点,低耦合,不过比较耗内存,因为都是提前并全部new出对象 */
		EventReceiver receiver1 = new EventReceiver1();
		EventReceiver receiver2 = new EventReceiver2();
		EventReceiver receiver3 = new EventReceiver3();
		EventReceiver receiver4 = new EventReceiver4();
		receiver1.setNextHandler(receiver2);
		receiver2.setNextHandler(receiver3);
		receiver3.setNextHandler(receiver4);
		receiver1.handleRequest(request);
	}
}
/*返回结果类*/
class Response {

}

/* 请求 */
class Request {

	Command command;

	public Request(Command command) {
		super();
		this.command = command;
	}

	public Command getCommand() {
		return command;
	}

	public void setCommand(Command command) {
		this.command = command;
	}

}

/* 请求命令 */
enum Command {
	EVENT1, EVENT2, EVENT3, EVENT4
}

class EventReceiver1 extends EventReceiver {

	@Override
	public Response getResponse() {
		System.out.println("事件处理者1处理并返回结果");
		return null;
	}

	@Override
	protected boolean isOk(Request request) {
		return request.getCommand() == Command.EVENT1;
	}

}

class EventReceiver2 extends EventReceiver {

	@Override
	public Response getResponse() {
		System.out.println("事件处理者2处理并返回结果");
		return null;
	}

	@Override
	protected boolean isOk(Request request) {
		return request.getCommand() == Command.EVENT2;
	}

}

class EventReceiver3 extends EventReceiver {

	@Override
	public Response getResponse() {
		System.out.println("事件处理者3处理并返回结果");
		return null;
	}

	@Override
	protected boolean isOk(Request request) {
		return request.getCommand() == Command.EVENT3;
	}

}

class EventReceiver4 extends EventReceiver {

	@Override
	public Response getResponse() {
		System.out.println("事件处理者4处理并返回结果");
		return null;
	}

	@Override
	protected boolean isOk(Request request) {
		return request.getCommand() == Command.EVENT3;
	}

}

时间: 2024-11-09 03:14:19

(行为型模式六)责任链模式的相关文章

行为型模式:责任链模式

文章首发:行为型模式:责任链模式 十一大行为型模式之四:责任链模式. 简介 姓名 :责任链模式 英文名 :Chain of Responsibility Pattern 价值观 :责任归我 个人介绍 :Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and

5 行为型模式之- 责任链模式

责任链模式介绍: 责任链模式是行为模式之一,什么是"链"?我们将多个节点首尾相连,就形成了链,对于链式结构,每个节点都可以拆开再重新连接,因此链式结构也具有很好的灵活性.将这样一种结构应用于编程领域,将每一个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从一个链的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止,我们将这样的一种模式称为责任链模式. 责任链模式的定义: 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系,将这

Delphi 设计模式:《HeadFirst设计模式》---行为模式之责任链模式

模式解说 责任链模式是一种对象的行为模式,它将处理客户端请求的那些对象联成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 通常使用在以下场合 1 有多个对象可以处理一个请求,哪个对象处理该请求事先并不知道,而是在运行时自动确定: 2 希望在不明确制定接收者的情况下,向多个对象中的一个提交请求: 3 处理一个请求的对象集合需要动态指定时: 16.2 结构和用法 1.抽象处理者(THandler)-定义了一个处理请求的接口.如果需要,则声明一个方法,实现对后续对象的链接: 2.具体处理者(

设计模式-行为型模式,责任链模式(10)

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式. 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. class Event: def __init__(self, name): self.name = name def __str__(self): ret

java-设计模式(行为型)-【责任链模式】

1.Chain Of Responsibility(责任链模式) 定义:有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递, 直到某一对象决定处理该请求.但是发出者并不清楚到底最终那个对象会处理该请求. 此处强调一点就是,链接上的请求可以是一条链,可以是一个树,还可以是一个环,模式本身不约束这个, 需要我们自己去实现,同时,在一个时刻,命令只允许由一个对象传给另一个对象,而不允许传给多个对象. 优点:责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整.

18行为型模式之责任链模式

概念  Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式. 例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分.首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,...,直到D完成d部分. 例2:比如政府部分的某项工作,县政府先完成自己能处理的部分,不能处理的部分

Chain of Responsibility责任链模式(C++责任链模式)

Chainof Responsibility责任链模式:相当于MFC,windows程序设计窗口中的消息机制这类. MFC中,消息是通过一个向上递交的方式进行处理,例如一个WM_COMMAND消息的处理流程可能为: 1) MDI主窗口(CMDIFrameWnd)收到命令消息WM_COMMAND,其ID位ID_×××: 2) MDI主窗口将消息传给当前活动的MDI子窗口(CMDIChildWnd): 3) MDI子窗口给自己的子窗口(View)一个处理机会,将消息交给View: 4) View检查

命令模式、状态模式、责任链模式区别(转)

命令模式:一次设定,统一执行.状态模式:    相当于If else if else:    设计路线:各个State类的内部实现(相当于If,else If内的条件)    执行时通过State调用Context方法来执行.职责链模式:    相当于Swich case    设计路线:客户设定,每个子类(case)的参数是下一个子类(case).    使用时,向链的第一个子类的执行方法传递参数就可以. ———————————————————————————————————— 命令模式:将多

设计模式(13)--Chain of Responsibility(责任链模式)--行为型

1.模式定义: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 2.模式特点: 责任链模式通过建立一条链来组织请求的处理者,请求将沿着链进行传递,请求发送者无须知道请求在何时.何处以及如何被处理,实现了请求发送者与处理者的解耦.在软件开发中,如果遇到有多个对象可

设计模式学习笔记(六:责任链模式)

1.1概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.这就是责任链模式. 责任链模式是使用多个对象处理用户请求的成熟模式,责任链模式的关键是将用户的请求分派给许多对象,这些对象被组织成一个责任链,即每个对象含有后继对象的引用,并要求责任链上的每个对象,如果能处理用户的请求,就做出处理,不再将用户的请求传递给责任链上的下一个对象:如果不能处理用户的请求,就必须将用户的请求传递给责任链上的下一个对象