博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 设计模式 职责链模式
阅读量:5953 次
发布时间:2019-06-19

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

用途


职责链模式 (Chain Of Responsibility)
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
职责链模式是一种
行为型模式

 

结构

图-职责链模式

Handler : 定义一个处理请求的接口。(
可选的)实现设置后继者的方法。
abstract 
class Handler {
    
protected Handler successor;
    
public 
void SetSuccesssor(Handler successor) {
        
this.successor = successor;
    }
    
    
public 
abstract 
void HandlerRequest(
int request);
}

ConcreteHandler : 处理它所负责的请求,可以访问它的后继者,如果可处理该请求,就处理之,否则就将请求转发给它的后继者。

class ConcreteHandler1 
extends Handler {
    @Override
    
public 
void HandlerRequest(
int request) {
        
if (request >= 0 && request < 10) {
            System.out.println("ConcreteHandler1 处理请求 " + request);
        } 
else 
if (
null != successor) {
            successor.HandlerRequest(request);
        }
    }
}
class ConcreteHandler2 
extends Handler {
    @Override
    
public 
void HandlerRequest(
int request) {
        
if (request >= 10 && request < 20) {
            System.out.println("ConcreteHandler2 处理请求 " + request);
        } 
else 
if (
null != successor) {
            successor.HandlerRequest(request);
        }
    }
}
class ConcreteHandler3 
extends Handler {
    @Override
    
public 
void HandlerRequest(
int request) {
        
if (request >= 20 && request < 30) {
            System.out.println("ConcreteHandler3 处理请求 " + request);
        } 
else 
if (
null != successor) {
            successor.HandlerRequest(request);
        }
    }
}

Client : 需要设置一个职责链的各环节对象串联起来。

public 
class ChainOfResponsibilityPattern {
    
public 
static 
void main(String[] args) {
        Handler h1 = 
new ConcreteHandler1();
        Handler h2 = 
new ConcreteHandler2();
        Handler h3 = 
new ConcreteHandler3();
        h1.SetSuccesssor(h2);
        h2.SetSuccesssor(h3);
        
        
int[] requests = {2, 29, 9, 15, 4, 19};
        
for (
int i : requests) {
            h1.HandlerRequest(i);
        }
    }
}

本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/p/4241496.html,如需转载请自行联系原作者

你可能感兴趣的文章
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
nginc+memcache
查看>>
Numpy中的random模块中的seed方法的作用
查看>>
关于jsb中js与c++的相互调用
查看>>
POJ-2251 Dungeon Master
查看>>
tortoisesvn的安装
查看>>
URAL 1353 Milliard Vasya's Function DP
查看>>
速读《构建之法:现代软件工程》提问
查看>>
Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
查看>>
django中聚合aggregate和annotate GROUP BY的使用方法
查看>>
TFS简介
查看>>
docker管理平台 shipyard安装
查看>>
Bootstrap3 栅格系统-简介
查看>>
ADODB类库操作查询数据表
查看>>