尚学堂【官网】-西安Java培训|c++培训|Android培训|安卓培训|java视频教程|软件工程师|-西安雁塔尚学堂计算机学校
 陕西科技大学-实习就业项训基地        陕西师范大学-实习就业项训基地
 西安财经学院-实习就业项训基地        西安工业大学-实习就业项训基地
  试听热线:
  029-62258374
常见问题  尚学堂首页新闻公告常见问题

【Java设计模式教程】责任链模式

www.xasxt.com 发布人:java  |  来自:本站  |  发布时间:2017-08-01 10:21:57  |  点击次数:148
 

尚学堂导读

责任链模式(Chain of Responsibility)是行为模式之一,该模式构造一系列分别担当不同职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作责任链模式。

一、应用场景

例1:比如客户要完成一个任务,这个任务包括 a、b、c、d 四个部分。

首先客户 Client 把任务交给 A,A 完成 a 部分之后,把任务交给 B,B 完成 b 部分,…,直到 D 完成 d 部分。

例2:web 开发中的 filter 和 interceptor

二、UML类图

抽象处理者(Handler)角色:定义一个请求的接口。

如果需要可以定义个一个方法用来设定和返回下家对象的引用。

具体处理者(ConcreteHandler)角色:如果可以处理就处理请求,如果不能处理,就把请求传给下家,让下家处理。

也就是说它处理自己能处理的请求且可以访问它的下家。

三、Java实现

public abstract class Handler {    protected Handler successor;    public abstract void handlerRequest(String condition);    public Handler getSuccessor() {        return successor;    }    public void setSuccessor(Handler successor) {        this.successor = successor;    }}public class ConcreteHandler1 extends Handler {    @Override    public void handlerRequest(String condition) {        System.out.println("ConcreteHandler1 handled ");        if (successor !=null) {            successor.handlerRequest(condition);        }    }}public class ConcreteHandler2 extends Handler {    @Override    public void handlerRequest(String condition) {        System.out.println("ConcreteHandler2 handled ");        if (successor !=null) {            successor.handlerRequest(condition);        }    }}public class ConcreteHandler3 extends Handler {    @Override    public void handlerRequest(String condition) {        System.out.println("ConcreteHandler3 handled ");        if (successor !=null) {            successor.handlerRequest(condition);        }    }}public class Client {    public static void main(String[] args) {        Handler handler1 = new ConcreteHandler1();        Handler handler2 = new ConcreteHandler2();        Handler handler3 = new ConcreteHandler3();        //链起来        handler1.setSuccessor(handler2);        handler2.setSuccessor(handler3);        handler1.handlerRequest("ConcreteHandler1");    }}

 

四、模式优缺点

优点:

1、降低耦合度。

职责链模式将请求处理细节(请求由哪些对象处理,怎样处理)跟客户端代码隔离开来,这些细节对客户端是透明的,客户端只需将相应的职责添加到链中即可,具体的处理过程交给责任链,降低了系统的耦合度。

2、增强了给对象指派职责的灵活性。

可以通过在运行时对职责链进行动态的增加或修改来改变处理一个请求的职责,职责链的维护是客户端负责的,所以增加或修改责任链不影响类库代码,非常灵活。

缺点:

1、不保证请求被接受。

由于责任链中的每个对象只处理自己感兴趣的请求,对于请求是否处理过并没有感知,这样容易导致请求没有对应的处理者。

当一个请求的责任链没有正确配置时也会导致该请求得不到处理。

2、由于责任链模式请求处理的不确定性,所以加大了程序调试的难度。

 

尚学堂--8月开班时间

一、Java--零基础入门就业班

开课时间:

2017年08月08日、

8月15日、8月22日

抢座中...

电话:029-62258374

地址:陕西省西安市高新区科技二路西安软件园天泽大厦五楼

二、免费公开课

每周二、四、六

周二周四公开课,下午两点开始

周六公开课,早上九点开始

在公众号主页发送【试听】获取免费听课名额

更多阅读:

游戏开发的『力量』

JavaScript 创建对象的七种方式

新手程序员的迷茫

做一名程序员需要学哪些知识?

 

当前文:【Java设计模式教程】责任链模式
上一页:Java 学完好找工作吗?
下一页:Java中的异常处理机制的简单原理和应用
在线报名(*为必填项)
在线咨询