`
ccbobocat
  • 浏览: 20160 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[导入]责任链模式

阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》,Chain of Responsibility,责任链模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com)
[正文]:

package pattern.chainofresponsibility;

/**
 * 责任链模式:Chain of Responsibility
 * @version 2009-5-9
 * @author Winty(wintys@gmail.com)
 */
public class ChainOfResponsibilityTest{
    public static void main(String[] args){
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        Handler handler3 = new ConcreteHandler3();

        //设置责任链
        handler3.setSuccessor(handler2);
        handler2.setSuccessor(handler1);

        //发送命令
        handler3.handleRequest();
    }
}

/**
 *抽象处理者
 */
abstract class Handler{
    protected Handler successor;

    public Handler getSuccessor(){
        return successor;
    }

    public void setSuccessor(Handler successor){
        this.successor = successor;
    }

    public abstract void handleRequest();
}

/**
 *具体处理者
 */
class ConcreteHandler1 extends Handler{
    public void handleRequest(){
        if(getSuccessor() != null){
            System.out.print("Request passed:from class Concrete1");
            System.out.println(" to class" + getSuccessor().getClass().getName());

            getSuccessor().handleRequest();
        }
        else{
            System.out.println("Request handled in ConcreteHandler1");
        }
    }
}

/**
 *具体处理者
 */
class ConcreteHandler2  extends Handler{
    public void handleRequest(){
        if(getSuccessor() != null){
            System.out.print("Request passed:from class Concrete2");
            System.out.println(" to class " + getSuccessor().getClass().getName());

            getSuccessor().handleRequest();
        }
        else{
            System.out.println("Request handled in ConcreteHandler2");
        }
    }
}

/**
 *具体处理者
 */
class ConcreteHandler3  extends Handler{
    public void handleRequest(){
        if(getSuccessor() != null){
            System.out.print("Request passed:from class Concrete3");
            System.out.println(" to class " + getSuccessor().getClass().getName());

            getSuccessor().handleRequest();
        }
        else{
            System.out.println("Request handled in ConcreteHandler3");
        }
    }
}

文章来源:http://blog.163.com/ccbobo_cat/blog/static/320994622009410264843
分享到:
评论

相关推荐

    设计模式demo

    - 责任链模式:通过将请求封装为对象,允许将请求沿着处理者链传递。 - 命令模式:将命令请求封装为一个对象,以便使用不同的请求、队列请求或参数化请求。 - 解释器模式:定义语言的文法,并提供解释器来处理...

    奇正藏药北京办事处深度分销模式的导入.pptx

    总结来说,奇正藏药北京办事处导入深度分销模式,是基于ARS战略理论,结合医药行业特点,通过精细化市场管理,强化渠道控制,提升客户关系,以实现区域市场的领先地位和企业可持续发展。这个过程中,团队建设、市场...

    深度营销模式及导入流程分析报告.docx

    基于这些信息,制定以构建营销价值链为核心的市场战略,合理规划营销资源,建立目标管理责任制和营销系统支持平台。区域市场策略注重份额的数量和质量,通过精耕细作来提升市场份额。 2. 焦点客户:焦点客户是具有...

    Head First设计模式 源代码

    - 责任链模式(Chain of Responsibility Pattern):避免将请求的发送者和接收者耦合在一起,使得多个对象都有可能接收请求。源码中会展示如何构建一个处理请求的链。 - 命令模式(Command Pattern):将一个请求...

    制造企业供应链管理模式及精益生产物流管理规划方案.pptx

    ### 制造企业供应链管理模式及精益生产物流管理规划方案 #### 一、供应链管理模式概述 1. **供应链定义**: - 供应链是指围绕核心企业,通过对信息流、物流、资金流的控制,从原材料采购到最终产品交付给消费者的...

    23中设计模式

    - 责任链模式(Chain of Responsibility):将请求封装为对象,然后让多个对象有机会处理这个请求,形成链式处理。 - 命令模式(Command):将命令封装为对象,以便于参数化不同操作,支持撤销操作。 - 解释器...

    ankang-report:report是一个开源程序的访问层中间件,基于java平台,依赖于spring,适用于现有大部分项目的接口测试。以及访问控制层的使用,简化控制层的繁琐代码,简化spring mvc的配置,替换了报告项目请求通道采用责任链模式设计,扩展性极强,流程完全可控!

    依赖于spring,可用于接口的调试及性能的展示,以及访问控制层的使用,简化控制层的繁琐代码,简化spring mvc的配置,替换的请求前的各个操作,重组性低,REST风格的接口使用简单,报告采用责任链模式设计,轻巧控制...

    经典实用有价值的企业管理培训课件卓越绩效管理模式的.ppt

    本培训课件主要围绕卓越绩效模式的理解、导入以及质量奖汇报材料的准备展开。 一、卓越绩效模式理解 卓越绩效模式源于国际上的质量奖项,如美国的波多里奇国家质量奖,它强调企业应从多维度审视自身,包括领导力、...

    供应链库存管理的特点.pdf

    供应链管理模式导入后,企业资源管理的范围扩大,要求管理者将整条供应链上各节点企业的资源全部纳入考虑范围,使供应链上的资源得到最佳利用。 第三,供应链库存管理是以最终客户为中心的。供应链管理以最终客户为...

    faif python-patterns 使用Python实现一些设计模式的例子

    以上只是部分设计模式的简介,实际项目中可能涉及更多模式,如策略模式、命令模式、职责链模式等。通过理解和熟练运用这些设计模式,开发者可以编写出更加灵活、可维护的代码,提高软件开发效率。在“faif python-...

    供应链管理的现代发展.pptx

    供应链管理的现代发展已经远远超越了传统的供应链模式,它涵盖了电子供应链管理、绿色供应链管理以及全球化供应链管理等多个重要领域。电子供应链管理(e-Supply Chain Management)是利用网络技术,尤其是互联网,...

    JAVA枚举与设计模式PPT教案学习.pptx

    最后,PPT还提到了责任链模式,虽然没有详细介绍,但枚举可以在构建职责链中扮演角色,每个枚举常量代表一个处理逻辑,形成一个处理请求的链条。 总结来说,这个PPT教案深入浅出地介绍了Java枚举的特性以及如何利用...

    Jive论坛原代码.rar

    在这些模块中,我们可以看到许多设计模式的身影,如工厂模式用于创建对象,单例模式用于全局唯一实例,观察者模式用于事件驱动,以及责任链模式用于处理权限控制。 在用户管理中,Jive论坛可能采用了策略模式,为...

    Chain of Responsibility.zip

    设计模式-责任链的演示项目,导入eclipse中可直接运行,编程语言:java 设计模式学习请参考博客 https://www.li-tian.net.cn/archives/2020-01-27-23-01-15

    designPatternCode.zip

    - **责任链模式**:将请求封装成对象,让多个对象都有机会处理这个请求,从而避免请求的发送者和接收者之间的耦合。 - **命令模式**:将请求封装为一个对象,以便使用不同的请求、队列或者日志请求,支持撤销操作...

    绿色供应链管理与集约型物流(1).pptx

    绿色供应链管理是指在供应链管理中融入环保理念,以降低环境污染、提高资源效率和促进可持续发展为目标的一种管理模式。它强调企业在产品设计、生产、销售、使用到废弃的全生命周期中,充分考虑环境影响,实施绿色化...

    经营体实施启动大会.pptx

    【经营体实施启动大会】是基于阿米巴经营理论的一次企业改革启动活动,旨在引入稻盛和夫的阿米巴管理模式,以提高...通过这次启动大会,企业旨在系统地导入阿米巴经营模式,以期实现企业管理的优化和业绩的显著提升。

    report 开源的访问层中间件,基于java平台

    report项目请求通道采用责任链模式设计,扩展性极强,流程完全可控! ankang-report report 是一个开源的访问层框架,基于java平台,依赖于spring,以Mozilla Public License 2.0 协议发布。可用于接口的调试及性能...

    struts_2_src

    通过分析源码,开发者不仅可以了解Struts 2的工作流程,还可以学习到设计模式的应用,如工厂模式、责任链模式、观察者模式等。同时,这对于自定义拦截器、扩展功能或者解决实际开发中遇到的问题都非常有帮助。因此,...

    工业品销售技能(分析与训练).pptx

    企业需导入与自身价值观相一致的营销理念,协调整个营销价值链,构建独特的营销模式,强化营销职能。 营销理念的发展经历了生产观念、产品观念、推销观念、营销观念以及全面营销观念的演变。生产观念强调高效率和...

Global site tag (gtag.js) - Google Analytics