资讯专栏INFORMATION COLUMN

JAVA设计模式之责任链模式

libxd / 1052人阅读

摘要:责任链模式涉及到的角色如下所示抽象处理者角色定义一个处理请求的抽象类。如果一个类承担了一部分责任,还将请求踢给下一个皮球,则被称为不纯的责任链模式。一般来说,日常开发中不纯的责任链模式用的比较多一点。参考责任链模式更多文章

在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链(Chain of Responsibility)模式的:

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

责任链模式涉及到的角色如下所示:

抽象处理者(Handler)角色:定义一个处理请求的抽象类。如果需要,可以定义一个方法以设定和返回对下家的引用。

具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。

举一个简单的例子,部门办活动需要报销。报销处职员可以处理单次500元以下的业务,超过500需要和处长联系。而处长只能处理单次1000元一下的业务,再高就只能找老大报了。但是老大目前只能处理单次1500元以下的业务,再高目前只能拒绝报销了。
这个例子的具体实现为:

抽象类Handler

public abstract class Handler {
    protected Handler nextHandler = null;
 
    public Handler getNextHandler() {
        return nextHandler;
    }
 
    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
     
    public abstract String dispose(String user , double fee);
}

职员类:

public class StaffMember extends Handler {
    @Override
    public String dispose(String user, double fee) {
        if(fee < 500){
            System.out.println("职员 给了 "+user+" "+fee+"元");
        }else if (super.getNextHandler() == null){
            System.out.println("谁都处理不了 "+user+" 要 "+fee+"元的事情");
        }else {
            super.getNextHandler().dispose(user,fee);
        }
        return null;
    }
}

处长类:

public class SectionChief extends Handler {
    @Override
    public String dispose(String user, double fee) {
        if(fee < 1000){
            System.out.println("小主管 给了 "+user+" "+fee+"元");
        }else if (super.getNextHandler() == null){
            System.out.println("谁都处理不了 "+user+" 要 "+fee+"元的事情");
        }else {
            super.getNextHandler().dispose(user,fee);
        }
        return null;
    }
}

老大类:

public class Director extends Handler {
    @Override
    public String dispose(String user, double fee) {
        if(fee < 5000){
            System.out.println("老大 给了 "+user+" "+fee+"元");
        }else if (super.getNextHandler() == null){
            System.out.println("谁都处理不了 "+user+" 要 "+fee+"元的事情");
        }else {
            super.getNextHandler().dispose(user,fee);
        }
        return null;
    }
}

Main方法:

public class Main {
    public static void main(String[] args){
        StaffMember staffMember = new StaffMember();
        SectionChief sectionChief = new SectionChief();
        Director director = new Director();
 
        //set Handler
        staffMember.setNextHandler(sectionChief);
        sectionChief.setNextHandler(director);
 
        staffMember.dispose("小王",400);
        staffMember.dispose("小混混",800);
        staffMember.dispose("老李",1200);
 
        staffMember.dispose("小明",10000);
    }
}

最后的结果就是:

纯责任链模式和不纯的责任链模式
如果一个类要么承担责任处理请求要么将请求踢给下一个皮球,则被称为纯责任链模式。
如果一个类承担了一部分责任,还将请求踢给下一个皮球,则被称为不纯的责任链模式。

一般来说,日常开发中不纯的责任链模式用的比较多一点。

参考:
java责任链模式

更多文章:http://blog.gavinzh.com

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65554.html

相关文章

  • Java设计模式职责模式

    摘要:简介职责链模式有时候也叫责任链模式,它是一种对象行为的设计模式。中的就是使用了责任链模式。纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现。如果坚持责任链不纯便不是责任链模式,那么责任链模式便不会有太大意义了。 Java设计模式之职责链模式 前几天复习java的异常处理时,接触到了责任链模式。在企业级应用中,从前台发过来的请求在后台抛出异常,异常处理的设计一般...

    bergwhite 评论0 收藏0
  • Java设计模式综合运用(责任模式进阶)

    摘要:责任链模式的具体运用以及原理请参见笔者责任链模式改进方式引入适配器模式关于接口适配器模式原理以及使用场景请参见笔者适配器模式。 1 责任链模式现存缺点 由于责任链大多数都是不纯的情况,本案例中,只要校验失败就直接返回,不继续处理接下去责任链中的其他校验逻辑了,故而出现如果某个部分逻辑是要由多个校验器组成一个整理的校验逻辑的话,则此责任链模式则显现出了它的不足之处了。(责任链模式的具体运...

    suosuopuo 评论0 收藏0
  • 不得不知的责任设计模式

    世界上最遥远的距离,不是生与死,而是它从你的世界路过无数次,你却选择视而不见,你无情,你冷酷啊...... showImg(https://segmentfault.com/img/remote/1460000019550563); 被你忽略的就是责任链设计模式,希望它再次经过你身旁你会猛的发现,并对它微微一笑...... 责任链设计模式介绍 抽象介绍 初次见面,了解表象,深入交流之后(看完文中的...

    raise_yang 评论0 收藏0
  • 忘了再看设计模式-行为型

    摘要:推文用设计模式解构三国是一种什么体验行为型设计模式一策略模式工厂模式优化结构状态模式随着状态改变而改变行为。推文状态机与状态模式责任链模式多个对象依次处理请求前者指定后者。代理模式代理针对一个对象,为了增加控制等中介双方都是多个,为了解耦。 策略模式 选择使用封装好的一系列算法,可相互替换。 类比:商店[Context]买完衣服买单[Stratege](现金[Concrete Stra...

    ShevaKuilin 评论0 收藏0

发表评论

0条评论

libxd

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<