设计模式--责任链

Mark:关于责任链Demo。

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

类图:

请假--审批(转)

描述:

  

请假这个事情,相信每个人都不陌生。

我们公司是个相对很宽松的公司。

在公司里,如果你的请假时间小于0.5天,那么只需要向项目经理打声招呼就OK了。

如果超过了0.5天,但是还小于2天,那么就要去找人事部处理,当然,这就要扣工资了。

如果超过了2天,你就需要去找总经理了,工资当然也玩完了。

那么,对于我们来说,这个流程就是这样的。

请求类。(包括请假时间和请假理由)

package pattern;
/**
 * @author _Venom_
 * @version 创建时间:2014年7月27日 下午7:01:14
 */

public class Request {

    private double day;

    private String reason;

    public Request(int _day, String _reason){
        this.day = _day;
        this.reason = _reason;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }
    public double getDay() {
        return day;
    }

    public void setDay(double day) {
        this.day = day;
    }

}

请假处理人。PM HR Manager 三个类。

首先:创建Boss抽象类。

package pattern;
/**
 * @author _Venom_
 * @version 创建时间:2014年7月27日 下午7:01:14
 */
public abstract class Boss {

    //两个核心的方法

    private String name;

    private Boss successor;

    public Boss(String _name){
        this.name = _name;
    }

    public abstract boolean passRequest(Request request);

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boss getSuccessor() {
        return successor;
    }

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

}

PM,HR,Manager 继承Boss

PM类:

package pattern;
/**
 * @author _Venom_
 * @version 创建时间:2014年7月27日 下午7:01:14
 */
public class PM extends Boss {

    public PM(String _name) {
        super(_name);
    }

    @Override
    public boolean passRequest(Request request) {
        System.out.println("i‘m pm");
        double day = request.getDay();
        String reason = request.getReason();
        if(day <= 0.5){
            return true;
        }
        return getSuccessor().passRequest(request);
    }

}

HR类:

package pattern;
/**
 * @author _Venom_
 * @version 创建时间:2014年7月27日 下午7:01:14
 */
public class HR extends Boss {

    public HR(String _name) {
        super(_name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public boolean passRequest(Request request) {
        System.out.println("i‘m hr");
        double day = request.getDay();
        String reason = request.getReason();
        if(day > 0.5 && day <= 2)
            return true;
        return getSuccessor().passRequest(request);
    }

}

Manager类:

package pattern;
/**
 * @author _Venom_
 * @version 创建时间:2014年7月27日 下午7:01:14
 */
public class Manager extends Boss {

    public Manager(String _name) {
        super(_name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public boolean passRequest(Request request) {
        System.out.println("i‘m manager");
        double day = request.getDay();
        String reason = request.getReason();

        if("正当理由".equals(reason))
            return true;
        return false;
    }

}

测试类:

package pattern;
/**
 * @author _Venom_
 * @version 创建时间:2014年7月27日 下午7:01:14
 */
public class TestClain {

    public static void main(String[] args) {
        Request request = new Request(3, "非正当理由");
        Boss pm = new PM("pm");
        Boss hr = new HR("hr");
        Boss manager = new Manager("manager");
        pm.setSuccessor(hr);
        hr.setSuccessor(manager);
        boolean pass = pm.passRequest(request);
        System.out.println(pass);
    }

}

设计模式--责任链,布布扣,bubuko.com

时间: 2024-08-05 11:12:59

设计模式--责任链的相关文章

java 设计模式 -- 责任链模式

设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪个对象处理,这使得我们能够动态的添加链上的对象而且分配责任. 纯责任链和非纯责任链 责任链分为两种.纯责任链和非纯责任链. 纯责任链是待处理对象request在处理对象handler链上传递,每一个处理对象handler处理request的一部分,到终于处理完毕.非纯责任链则是待处理对象reques

[设计模式] 责任链模式之变种 - 责任链子

今天看到 wikipedia 的责任链模式,好奇之下搜寻相关文章,此文章主要参考 91大的 [.NET]重构之路系列v11 –用责任链模式打破讨厌的switch case 的变种作法,所以跟原本的责任链模式的设计思路不太相同,但结果相同, 所以阅读前,建议先看完91大的文章后,在来看这篇会比较能感觉出差异. ?这边先引用91大文章结尾结论中的补充来复习一下责任链的重点, 20120415 补充:责任链的用意在于把每个角色的职责分清楚,每个对象只需要做好自己的事,透过责任链的方式来组合,并完成使用

设计模式——责任链(chain of responsibiltiy)

责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象. 每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象.也就是说责任链决定了任务的处理上方和下方. 该模式还描述了往该处理链的末尾添加新的处理对象的方法.<wiki> 1:建立一个filte接口,用来处理客户度发送给服务器端,以及服务器端返回给客户端的消息. 1 public interface Filter { 2 void doFilter(Reque

24天学会设计模式------责任链模式

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka/article/details/43210027 一.责任链模式(Chain of Responsibility Pattern) 1.简介 从名字上大概也能猜出这个模式的大概模样--系统中将会存在多个有类似处理能力的对象.当一个请求触发后,请求将在这些对象组成的链条中传递,直到找到最合适的"责任"对象,并进行处理.<设计模式>中给它的定义如下:使多个对象都有机会处理请

编程内功修炼之设计模式—责任链模式

在设计模式不清楚的情况下,学习各种框架不仅难学懂,也难理解,即使理解也不够深刻. 为了走更远的路,从基础抓起,每天坚持前进一小步! 虽然即将毕业,虽然路途很远,没有梦想何必远方! package edu.designpattern.chainofresponsibility; import java.util.ArrayList; import java.util.List; import org.junit.Test; /** * 责任链设计模式 * 模型练习 * * @author heli

Java与设计模式-责任链模式

责任链模式属于行为型设计模式之一,怎么理解责任链?责任链是可以理解成数个对象首尾连接而成,每一个节点就是一个对象,每个对象对应不同的处理逻辑,直至有一个对象响应处理请求结束.这一种模式成为责任链模式. 生活中可以找到责任链模式的原型吗?这种例子很多,比如你要去买房子,首先是销售人员(对象1)接待你,你说想要百分之3的折扣,没问题,这时销售人员就有打百分之三折扣的权限,销售人员(对象1)进行处理.这时来了一个土豪,说要买10套,要百分之五的折扣,销售人员(对象1)没有百分之五折扣的权限,必须要想上

设计模式-责任链设计

看了一下设计模式中的责任链设计模式,主要实现类似拦截器的功能,记下来方便自己以后复习. 1.应用场景 假设要处理爬虫趴下来的内容,你就需要发这些内容进行去噪,例如:取格式化html标签,去页面脚本,去敏感信息等等,如果将这些过滤内容都写在一个方法中,那么势必造成代码耦合性强,如果以后不断的添加内容,将造成很大的维护成本. 所以,我们需要把变化的内容抽取出来定义为接口,需要使用时我们只需实现其对应的操作. 2.实例应用 1. 内容去噪过滤 先定义过滤接口 package org.andy.filt

我的Java设计模式-责任链模式

今天来说说程序员小猿和产品就关于需求发生的故事.前不久,小猿收到了产品的需求. 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的. 小猿:......露点?你大爷的,让身为正义与纯洁化身的我做这种需求,还露点. 产品经理:误会误会,是放一张暴露一点点的,尺寸不大. 小猿:尼玛~能说清楚些吗,需求模棱两可的.不干,我要上报boss. 产品经理也一阵无语,这豆丁的事还上报boss.话说这上报也得走程序是吧,技术经理就不干了,"凭什么要跳过我,得经过我才能到boss".咦

设计模式-责任链模式在实际项目中的使用

最近一次迭代,参与了公司数据应用平台的开发,其中负责的一块功能早早的就完成了代码的编写工作,即将进入测试阶段,因为有时间思考和总结代码编写中遇到的难题,便想着将代码做一次重构:其中优化的一个功能就是关于数据平台敏感字段的收集 功能描述:数据平台敏感字段的收集: 提供 service 方法,查询是否需要扫描表做触发式收集,指定具体实例与库的表,随机取 N 行(1~max(id) 之间):a.对每一行的每一个字段的值(取非 null 非空的值)做正则匹配 b. 对每一行的每一个字段的值看是否包含了敏