设计模式(九)之责任链模式

今天来讲一个悲伤的故事,关于小明找小红的故事。加班狗小明某日不用加班,开开心心把家还,结果妻子小红不在家,发生了下面的一幕:

上代码。首先定义好小红

public interface Lover {
}

小红:

public class WifeHong implements Lover {
    public WifeHong(Affairs affairs) {
        System.out.println("我是小红,去" + affairs.name + "家。");
        affairs.setLover(this);
    }
}

处理请求抽象类:

public abstract class Affairs {

    protected Affairs nextOne;
    protected String name;
    protected Lover lover;

    protected Affairs(String name) {
        this.name = name;
    }

    public abstract void handleRequest(Lover lover);

    public void setLover(Lover lover) {
        this.lover = lover;
    }

    public void setNextOne(Affairs nextOne) {
        this.nextOne = nextOne;
    }

    public Affairs getNextOne() {
        return nextOne;
    }
}

具体处理请求类:

public class OldMan extends Affairs {

    public OldMan(String name) {
        super(name);
    }

    @Override
    public void handleRequest(Lover _lover) {
        System.out.println("==============================");
        System.out.println("咚咚咚... " + name + " ,我来找小红。");
        if (lover == null)
            System.out.println("[" + name + "]我不认识,走开。");
        else if (lover.equals(_lover))
            System.out.println("[" + name + "]pia pia pia...");

        if (nextOne == null)
            System.out.println("[" + name + "]回家吧,小明,听大哥的话。");
        else {
            System.out.println("[" + name + "]去别人家找去,跟我没关系。");
            nextOne.handleRequest(_lover);
        }
    }
}

请求者小明:

public class XiaoMing {
    public static void main(String[] args) {
        OldMan oldLi = new OldMan("老李");
        OldMan oldZhou = new OldMan("老周");
        OldMan oldWang = new OldMan("老王");
        Lover xiaoHong = new WifeHong(oldWang);
        oldLi.setNextOne(oldZhou);
        oldZhou.setNextOne(oldWang);
        oldLi.handleRequest(xiaoHong);
    }
}

执行结果,真相大白:

后话:关于责任链,就在于这个handleRequest方法,其他东西都是情节需要,自行演绎。(^_^)

时间: 2024-09-21 12:56:05

设计模式(九)之责任链模式的相关文章

实例讲解Java的设计模式编程中责任链模式的运用_java

定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止.类型:行为类模式类图: 首先来看一段代码: public void test(int i, Request request){ if(i==1){ Handler1.response(request); }else if(i == 2){ Handler2.response(request); }else if(i == 3){ Handler3.r

详解C++设计模式编程中责任链模式的应用_C 语言

职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 其思想很简单,比如考虑员工要求加薪.公司的管理者一共有三级,总经理.总监.经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监.总监的处理方式也一样,总经理可以处理所有请求.这就是典型的职责链模式,请求的处理形成了一条链,直到有一个对象处理请求.给出这个例子的UML图.

设计模式——17、责任链模式(Chain of Responsibility)

17.责任链模式(Chain of Responsibility)接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求.但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整.Abstracthandler类提供了get和set方法,方便MyHandle类设置和修改引用对象,MyHandle类是核心,实例化后生成一系列相互持有的对象,构成一条链.[

Java设计模式之责任链模式简介_java

对于使用过宏的朋友应该知道,利用宏可以实现一个键绑定多个技能.例如如果排在前面的技能有CD,则跳过此技能,执行之后的技能.记得曾经玩DK,打怪的时候,就是用一个键,一直按就行了.在servlet里的doGet和doPost方法,我们一般都把doGet请求发动到doPost里来处理,这也是一种责任链的模式. 这里,有个宏,绑定了"冰血冷脉"和"寒冰箭"两个技能,程序实例如下所示: package responsibility; /** * DOC 技能接口,要绑定的技

设计模式系列之九:职责链模式

前言 责任链模式属于行为型设计模式,所谓责任链,就是把责任处理对象连成一条链,这样当一个处理对象不能及时处理的时候就会交给下一个处理对象处理,直到被处理为止.就像我们找人签字盖章的时候,当一个对象不能处理的时候他会告诉你你应该下一个部门进行盖章,而如果下一个部门仍然不能处理就会继续告诉你下一个应该去的部门,直到把章盖好.这个例子不一定恰当,但是反映了责任传递这么一个过程.责任传递是责任链模式的核心,责任链模式使得多个处理对象有机会处理请求,从而避免请求发送者与请求接收者之间的解耦,把这些对象连成

详解java设计模式之责任链模式

从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正.开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒. 假比说,贾母.贾赦.贾政.贾宝玉和贾环是五个参加击鼓传花游戏的传花者,他们组成一个环链.击鼓者将花传给贾母,开始传花游戏.花由贾母传给贾赦,由贾赦传给贾政,由贾政传给贾宝玉,又由贾宝玉传给贾环,由贾环传回给贾母,如此往复(见下图).当鼓声停止时,手中有花的人就得执行酒令. 图1.击鼓传

PHP设计模式之责任链模式的深入解析_php技巧

责任链模式,其目的是组织一个对象链处理一个如方法调用的请求.当ConcreteHandler(具体的处理程序)不知道如何满足来自Client的请求时,或它的目的不是这个时,它会委派给链中的下一个Handler(处理程序)来处理. 这个设计模式通常和复合模式一起使用,其中有些叶子或容器对象默认委派操作给它们的父对象.另一个例子是,本地化通常是使用责任链处理的,当德语翻译适配器没有为翻译关键词找到合适的结果时,就返回到英语适配器或干脆直接显示关键词本身. 耦合减少到最低限度:Client类不知道由哪

Java设计模式编程中的责任链模式使用示例_java

责任链模式:多个对象由其对象对应下家的引用连成一条链,请求在这个链上传递,直到 链上的某一个接收对象处理此请求.因为请求的客户端并不知道链上最终是谁来处理这个请求,使得系统可以在不影响客户端的情况下动态地重新组织和分配责任, 从而避免了请求发送者与请求处理者之间的耦合. 责任链械中涉及到三种角色: 1,抽象处理者角色 2,具体处理者角色 3,请求发送者 小例子:假设去买房子,买房子就需要砍价, 卖房的人职位不同,可以优惠的价格也不同,不同职位就可以形成一个处理请求的链.我们暂定: * 基层销售员

设计模式:责任链模式(Chain of Responsibility)

 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止. 责任链模式的角色: 1. 抽象处理者角色(Handler):定义出一个处理请求的接口.如果需要,接口可以定义出一个方法以设定和返回对下家的引用.这个角色通常由一个Java抽象类或者Java接口实现.上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handlerRequest()规范了子类处理请求的操作. 2. 具体处理者角色(Co

乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)

原文:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern) 作者:webabcd 介绍 为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它. 示例 有一个Message实体类,某个类对它的操作有Insert()方法.现在要求根据插