博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式--责任链模式(COR)
阅读量:4198 次
发布时间:2019-05-26

本文共 2211 字,大约阅读时间需要 7 分钟。

责任链模式
概述
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,    并沿着这条链传递该请求,直到有一个对象处理它为止。        这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接受者.
适用性
1.有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。    2.你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。    3.可处理一个请求的对象集合应被动态指定。
参与者
1.Handler      定义一个处理请求的接口。      (可选)实现后继链。    2.ConcreteHandler      处理它所负责的请求。      可访问它的后继者。      如果可处理该请求,就处理之;否则将该请求转发给它的后继者。    3.Client      向链上的具体处理者(ConcreteHandler)对象提交请求。
ExampleHandler public interface RequestHandle {    void handleRequest(Request request);}ConcreteHandler public class HRRequestHandle implements RequestHandle {    public void handleRequest(Request request) {        if (request instanceof DimissionRequest) {            System.out.println("要离职, 人事审批!");        }         System.out.println("请求完毕");    }}public class PMRequestHandle implements RequestHandle {    RequestHandle rh;        public PMRequestHandle(RequestHandle rh) {        this.rh = rh;    }        public void handleRequest(Request request) {        if (request instanceof AddMoneyRequest) {            System.out.println("要加薪, 项目经理审批!");        } else {            rh.handleRequest(request);        }    }}public class TLRequestHandle implements RequestHandle {    RequestHandle rh;        public TLRequestHandle(RequestHandle rh) {        this.rh = rh;    }    public void handleRequest(Request request) {        if (request instanceof LeaveRequest) {            System.out.println("要请假, 项目组长审批!");        } else {            rh.handleRequest(request);        }    }}Client public class Test {        public static void main(String[] args) {        RequestHandle hr = new HRRequestHandle();        RequestHandle pm = new PMRequestHandle(hr);        RequestHandle tl = new TLRequestHandle(pm);                //team leader处理离职请求        Request request = new DimissionRequest();        tl.handleRequest(request);                System.out.println("===========");        //team leader处理加薪请求        request = new AddMoneyRequest();        tl.handleRequest(request);                System.out.println("========");        //项目经理上理辞职请求        request = new DimissionRequest();        pm.handleRequest(request);    }}result 要离职, 人事审批!请求完毕===========要加薪, 项目经理审批!========要离职, 人事审批!请求完毕

转载地址:http://cjbli.baihongyu.com/

你可能感兴趣的文章
kibana做图表无法选取需要选的字段
查看>>
ELK setup guide
查看>>
Splunk setup guide
查看>>
hive性能优化
查看>>
Spark运行任务
查看>>
Java - Elasticsearch RestFul连接搜索查询
查看>>
Java - Elasticsearch查询类型
查看>>
WebSocket vs REST
查看>>
SQLite3使用
查看>>
sql实现oracle分析函数功能 over partition by
查看>>
MySQL Memory 存储引擎
查看>>
Postman - REST测试利器
查看>>
javax.servlet获取
查看>>
Spring4搭建+REST在Spring上搭建
查看>>
Kafka的配置要点
查看>>
http 连接池
查看>>
REST实现(Spring下实现+JDK6机制实现)
查看>>
高并发分布式事务解决之道-Actor模型(附Akka与Reactor比较)
查看>>
ZooKeeper 安装、配置
查看>>
HTTP报文详解
查看>>