dtcms 源码 Kerberos认证原理 Zookeeper安装 北斗系统 Hibernate ssm Java中高进阶架构 tsql kubernetes graph build enums 网络营销推广 jackson jvm Animsition vue例子 vue绑定点击事件 angularjs教程 java设计模式视频 php抽奖源码 node卸载命令 linux源码在线阅读 mysql批量更新数据 删除数组第一个元素 js字符串排序 monkey安装 oracle查询数据库 kafka学习 centos7安装gcc mysql重启 python语言 python开发界面 javasocket通信 java文件流 java的for循环 java连接mysql的jar包 java线程停止 lanhelper unix操作系统下载
当前位置: 首页 > 学习教程  > 编程语言

23.责任链模式

2020/11/24 10:17:24 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

责任链模式责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦 有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 …

责任链模式

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦

有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。

举例:学校经费审批,大于1000的要校长审批,小于1000的要后勤主任审批。传统做法就是在if else中写判断。如果用职责链模式来解决。

在这里插入图片描述
Approver:定义处理任务的接口(责任接口),接口中必须含有一个自身的对象和一个处理任务的方法。例如:有ABC三个实现类实现了Approver接口,那么ABC三个类中就会判断自己嫩否处理这个request请求,如果A不能处理本请求,那么上面描述的那个自身对象指向的就是B职责类。这样就是形成了A处理不了传递给B,B如果处理不了就传递给C。

Request:请求任务发起者,这里就将任务类和业务处理类解耦开。

/**
 * 定义一个任务类
 */
public class Request {
   private Integer price;

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    public Request(Integer price) {
        this.price = price;
    }
}



/**
 * 处理职责的接口
 */
public abstract class Approver {
    //这个对象表示:本对象没法处理这个requset请求,交给下一个Approver,approver就是下一个处理者
    private Approver approver;
    //当前处理者的名字
    private String name;

    //当前处理者处理业务的方法,交由实现者自己实现
    public abstract void handler(Request request);

    public Approver(String name) {
        this.name = name;
    }

    public Approver getApprover() {
        return approver;
    }

    public void setApprover(Approver approver) {
        this.approver = approver;
    }

    public String getName() {
        return name;
    }

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



/**
 * 后勤主任,处理1000以下的申请
 */
public class HouQing extends Approver {
    public HouQing(String name) {
        super(name);
    }

    public void handler(Request request) {
        if (request.getPrice() <= 1000) {
            System.out.println("我是"+getName()+",处理1000以下的申请");
        }else {
            getApprover().handler(request);
        }
    }
}


/**
 * 校长,处理1000以上的申请
 */
public class XiaoZhang extends Approver {
    public XiaoZhang(String name) {
        super(name);
    }

    public void handler(Request request) {

        System.out.println("我是"+getName()+",处理1000以上的申请");
    }
}


/**
 * 测试
 */
public class Test {
    public static void main(String[] args) {
        Request request = new Request(1500);
        HouQing houQing = new HouQing("后勤");
        XiaoZhang xiaoZhang = new XiaoZhang("校长");
        houQing.setApprover(xiaoZhang);
        houQing.handler(request);
    }
}


本文链接: http://www.dtmao.cc/news_show_400244.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?