您的位置:首页 > 编程语言 > Go语言

GoF23种设计模式之行为型模式之责任链模式

2013-06-03 14:37 609 查看
一、概述

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止。其设计思想是:给对多个对象处理一个请求的机会,从而解耦请求发送者和接收者。

二、适用性

1.有多个对象可以处理一个请求,到底是哪个对象处理请求,交由运行时刻自动确定的时候。

2.你想在不明确指定接收者的情况下,向多个对象中的一个发送请求的时候。

3.可以处理一个请求的对象集合应该被动态指定的时候。

三、参与者

1.Handler:定义一个处理请求的接口。可能的话实现后继链(option)。

2.ConcreteHandler:链上的具体处理者。处理它负责的请求。可以访问它的后继。如果可以处理该请求,就处理;否则将该请求转发给其后继。

3.Client:向链上的具体处理者对象提交请求。

四、类图



五、示例

Handler

package cn.lynn.chainofresponsibility;

public interface IRequestHandler {

public void handleRequest(IRequest request);

}
ConcreteHandler
package cn.lynn.chainofresponsibility;

public class SunRequestHandler implements IRequestHandler {

@Override
public void handleRequest(IRequest request) {
if(request instanceof FightRequest) {
System.out.println("悟空火眼金睛,三打白骨精!");
}
}

}
package cn.lynn.chainofresponsibility;

public class ZhuRequestHandler implements IRequestHandler {
private IRequestHandler handler;

public ZhuRequestHandler(IRequestHandler handler) {
this.handler = handler;
}

@Override
public void handleRequest(IRequest request) {
if(request instanceof PeepRequest) {
System.out.println("八戒偷窥嫦娥,被贬下凡!");
}
handler.handleRequest(request);
}

}
package cn.lynn.chainofresponsibility;

public class ShaRequestHandler implements IRequestHandler {

private IRequestHandler handler;

public ShaRequestHandler(IRequestHandler handler) {
this.handler = handler;
}

@Override
public void handleRequest(IRequest request) {
if(request instanceof FindRequest) {
System.out.println("师傅让妖怪抓走了,沙增找不到!");
}
handler.handleRequest(request);
}

}
Client
package cn.lynn.chainofresponsibility;

public class Client {

public static void main(String[] args) {
IRequestHandler sun = new SunRequestHandler();
IRequestHandler zhu = new ZhuRequestHandler(sun);
IRequestHandler sha = new ShaRequestHandler(zhu);

IRequest request = new FindRequest();
sha.handleRequest(request);

request = new PeepRequest();
zhu.handleRequest(request);

request = new FightRequest();
sun.handleRequest(request);
}

}
Result
师傅让妖怪抓走了,沙增找不到!
八戒偷窥嫦娥,被贬下凡!
悟空火眼金睛,三打白骨精!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: