责任链模式(chain of responsbility)

责任链模式定义如下:

  avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.

  (使得多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链条传递请求,直到有对象处理为止)

应用:

责任链模式的优点:

  责任链模式非常显著的优点是将请求和处理分开。请求者可以不用知道是谁处理的,处理者可以不用直到请求的全貌,两者解耦和,提高系统灵活性。

责任链模式的缺点:

  1、性能问题,每个请求都是从链头遍历到链尾,特别是链比较长的时候,性能问题非常显著。

  2、调试不方便,处理链中或许设计子递归,调试逻辑复杂。

使用意见:

  给链设置一个最大长度,避免出现过长的链,使得性能最佳。

package chainOfResponsibility;

public interface Handle {
    String doHandle(String str);
}
package chainOfResponsibility;

import java.util.ArrayList;
import java.util.List;

public class HandleChain {

    private List<Handle> list = new ArrayList<Handle>();

    public HandleChain addHandle(Handle e) {
        list.add(e);
        return this;
    }
    public String doHandle(String str){
        String result = str;
        for (Handle handle : list) {
            result = handle.doHandle(result);
        }
        return result;
    }
}
package chainOfResponsibility;

public class LineHandle implements Handle{

    @Override
    public String doHandle(String str) {
        return str.replaceAll("html", "wangye");
    }

}
package chainOfResponsibility;

public class NameHandle implements Handle{

    @Override
    public String doHandle(String str) {
        return str.replace("name", "nyx");
    }

}
package chainOfResponsibility;

public class SexHandle implements Handle{

    @Override
    public String doHandle(String str) {
        return str.replace("1", "男");
    }

}
package test;

import chainOfResponsibility.HandleChain;
import chainOfResponsibility.LineHandle;
import chainOfResponsibility.NameHandle;
import chainOfResponsibility.SexHandle;

public class Main {
    public static void main(String[] args) {
        LineHandle lh = new LineHandle();
        NameHandle nh = new NameHandle();
        SexHandle sh = new SexHandle();
        HandleChain hc = new HandleChain();
        hc.addHandle(lh).addHandle(nh).addHandle(sh);
        String str = "--111---name---html--";
        String res = hc.doHandle(str);
        System.out.println(res);
    }
}

最后结果:

  

时间: 2024-10-08 22:21:35

责任链模式(chain of responsbility)的相关文章

[设计模式-行为型]责任链模式(Chain of Responsibility)

概括 名称 Chain of Responsibility 结构 动机 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 解析 形象比喻: 晚上去上英语课, 为了好开溜坐到了最后一排, 哇, 前面坐了好几个漂亮的MM 哎

责任链模式-Chain of Responsibility(Java实现), 例1

责任链模式-Chain of Responsibility, 例1 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. Trouble类 本类是:待责任链来处理的问题Trouble类. 本例子较简单, Trouble只有一个int型作为待处理的编号. public class Trouble { private int number; public Trouble(int number) { this.number

责任链模式(Chain)

前言:责任链模式在很多框架中都有体现,比如Spring,Mybatis等. 概念:使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象串成一条链,并沿着这条链一直传递该请求,直到有对象处理它为止.责任链模式的重点在“链上”,由一条链去处理相似的请求,在链中决定谁来处理这个请求,并返回相应的结果. 生活场景:在公司上班,遇到突发事件都需要请假,而请假根据天数不同需要不同的主管来同意我们的请求,比如我们要请1-3天的假期一级主管就可以直接同意,不需要再往上请求,如果

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

感觉这个设计模式和组合模式一样是一种非常巧妙的设计模式,在须要使用它的地方假设不使用这样的设计模式代码会变的非常复杂,可是这样的设计模式的基本原理又是非常easy的. 责任链模式: 通过使多个对象都有机会来处理请求的方式避免了请求的发送者和接收者之间的耦合.将接收者组织成链式的结构这样能够将请求沿着这条链进行传递,直到有接收者对它进行处理. UML类图: 主要包含: Handler:定义了一个处理请求的接口,实现了定义后继者的方法. ConcreteHandler:处理各自负责的请求,假设不能处

设计模式 笔记 责任链模式 chain of responsibility

//---------------------------15/04/25---------------------------- //Chain of responsibility 责任链-----对象行为型模式 /* 1:意图: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象 连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 2:动机: 3:适用性: 1>有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 2>你想在不明确指定

[设计模式] 责任链模式 Chain of Responsibility

转    http://blog.csdn.net/wuzhekai1985   http://www.jellythink.com/archives/878 向项目经理提交了休假申请,我的项目经理向项目主管提交了我的休假申请,项目主管向部门经理提交了我的休假申请:最后,部门经理同意了我的休假申请.是的,一个简单的休假申请,需要这么复杂的流程,这也是一个公司保证它正常运行的必要.如果部门经理休假了,那么我的休假申请由谁审批呢?这个时候由项目主管代替部门经理进行审批.一个休假申请的审批制度有着严格

B5:责任链模式 Chain Of Responsibility

使多个对象都有机会处理处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着该链处理请求,直到有一个对象能够处理它为止. UML 示例代码: abstract class Handle { protected $nextHandle; public function setNextHandle(Handle $handle) { $this->nextHandle = $handle; } abstract public function handleRequest(

责任链模式(Chain of responsibility pattern)

鲁春利的工作笔记,好记性不如烂笔头 本文出自 "闷葫芦的世界" 博客,请务必保留此出处http://luchunli.blog.51cto.com/2368057/1892886

GOF23设计模式之责任链模式(chain of responsibility)与结构型模式总结经典

 责任链模式:Chain of responsibility      将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象. 场景:      打牌时,轮流出牌.      接力赛跑      大学中,奖学金审批.      公司中,公文审批.   结构型模式汇总: 代理模式:为真实对象提供一个代理,从而控制对真实对象的访问. 适配器模式:使原本由于接口不兼容不能一起工作的类,可以一起工作. 桥

简明 责任链模式(5.1)

学生请假是一个经典的引入责任链模式(Chain of Responsibility pattern)的现实场景.学生通常向辅导员请假,按照请假的天数不同如几节课.几天.一个月.一年等,辅导员可能自己或要请示院党委副书记.书记.学校校长批准. 责任链模式可以称为"推卸"式的代理,多个对象能够处理客户发出的请求,即它们都具有相应的方法如handle(). 责任链模式中,多个处理者对象可以构成一定的数据结构,简单地如单向链表.不论构成什么结构,对于处理者的抽象正如数据结构中常用的结点.结点是