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

[color=red]行为型模式顾名思义,主要负责的是操控对象行为,分为以下几种[/color]
[list]
[*]一、[b]Chain of Responsibility ( 责任链模式 )[/b]
[*]二、Command ( 命令模式 )
[*]三、Interpreter ( 解释器模式 )
[*]四、Iterator ( 迭代器模式 )
[*]五、Mediator ( 中介者模式 )
[*]六、Memento ( 备忘录模式 )
[*]七、Observer ( 观察者模式 )
[*]八、State ( 状态模式 )
[*]九、Strategy ( 策略模式 )
[*]十、TemplateMethod ( 模板方法 )
[*]十一、Visitor ( 访问者模式 )
[/list]

[b]一、Chain of Responsibility ( 责任链模式 )[/b]
责任链模式是由一条链去处理相似的请求在链中决定谁来处理这个请求
[img]http://dl2.iteye.com/upload/attachment/0101/2820/98bd8b62-3cda-367a-9522-4ffd3de31c70.png[/img]

/**
* 抽象处理者完成3个任务
* 1、定义一个请求的处理方法handleMessage(唯一对外开放的方法)
* 2、定义一个链的编排方法setNext,设置下一个处理者
* 3、定义了具体的请求者必须实现的两个抽象方法:
* 能够处理的级别getHandlerLevel
* 具体的处理任务echo
*/
//抽象处理者
public abstract class Handler{
private Handler nextHandler;
//每个处理者都必须对请求做出处理
public final Response handleMessage(Request request){
Response response = null;
//判断是否是自己的处理级别
if(this.getHandlerLevel().equals(request.getRequestLevel())){
response = this.echo(request);
}else{ //不属于自己的级别处理
if(this.nextHandler != null){
response = this.nextHanlder.handleMessage(request);
}else{
//没有适当的处理者,业务自行处理
}
}
return response;
}
//设置下一个处理者是谁
public void setNext(Handler _handler){
this.nextHandler = _handler;
}
//每个处理者都有一个处理级别
protected abstract Level getHandlerLevel();
//每个处理者都必须实现处理任务
protected abstract Response echo(Request request);
}

//具体处理者1
public class ConcreteHandler1 extends Handler{
//定义自己的处理逻辑
protected Response echo(Request request){
//处理逻辑
return null;
}
//设置自己的处理级别
protected Level getHandlerLevel(){
//设置自己的处理级别
return null;
}
}
//具体处理者2
public class ConcreteHandler2...
//具体处理者3
public class ConcreteHandler3...

//模块中有关框架代码
public class Level(){
//定义一个请求和处理等级
}
public class Request{
//请求的等级
public Level getRequestLevel(){
return null;
}
}
public class Response{
//处理者返回的数据
}

//场景类
public class Client{
public static void main(String[] args){
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3();
handler1.setNext(handler2);
handler2.setNext(handler3);
Response response = handler1.handlerMessage(new Request());
}
}


class Chain
def initialize
@chain = []
end
def add_handler &block
@chain << block
end
def handle req
@chain.each do |e|
# 如果handler返回 false(未处理),则让下一个处理
result = e[req]
return result if result
end
false
end
end
c = Chain.new
c.add_handler {|req| req == 1 ? "1:handled" : puts "1:not my responsibility" }
c.add_handler {|req| req == 2 ? "2:handled" : puts "2:not my responsibility" }
puts(c.handle 1)
puts(c.handle 2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值