zoukankan      html  css  js  c++  java
  • java设计模式----责任链模式

    责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式强调的是每一个对象及其对下家的引用来组成一条链,利用这种方式将发送者和接收者解耦。

    责任链模式还是很好理解的,责任链模式的应用场景也很多,比如说OA系统的工作流,Struts2的拦截器(Interceptor),servlet的过滤器(Filter)

    责任链主要两个角色,一个是抽象处理者角色,一个是具体处理者角色。抽象处理者定义请求方法及连接下家的对象引用。具体处理者则是判断当前请求是否符合自己处理要求,不能处理则交给下家。

    这样的话,我们在测试的时候,利用抽象处理者中对象的set方法将具体对象链接起来。然后传入合适参数即可。上代码:

    抽象处理对象,定义一个具体对象,设置getset方法,定义接收请求方法:

    package chain;
    
    public abstract class Handler {
    	private Handler seccessor;
    	public abstract void handlerQequest(String condition);
    	public Handler getSeccessor() {
    		return seccessor;
    	}
    	public void setSeccessor(Handler seccessor) {
    		this.seccessor = seccessor;
    	}
    
    }
    

    具体处理对象一:

    package chain;
    
    public class ConcreteHandler1 extends Handler{
    
    	@Override
    	public void handlerQequest(String condition) {
    		if(condition.equals("ConcreteHandler1")){
    			System.out.println("处理器1处理....");
    		}else{
    			System.out.println("处理器1不处理...");
    			//交给下一个处理器处理
    			getSeccessor().handlerQequest(condition);
    		}
    	}
    
    }
    

    具体处理对象二:

    package chain;
    
    public class ConcreteHandler2 extends Handler{
    
    	@Override
    	public void handlerQequest(String condition) {
    		if(condition.equals("ConcreteHandler2")){
    			System.out.println("处理器2处理...");
    		}else{
    			System.out.println("处理器2不处理...");
    			getSeccessor().handlerQequest(condition);
    		}
    	}
    
    }
    

    具体处理对象N:

    package chain;
    
    public class ConcreteHandlerN extends Handler{
    
    	@Override
    	public void handlerQequest(String condition) {
    		System.out.println("处理器N处理...");
    	}
    
    }
    

    测试:(将所有处理对象链接起来)

    package chain;
    
    public class Test {
    	public static void main(String[] args) {
    		Handler handler1 =new ConcreteHandler1();
    		Handler handler2=new ConcreteHandler2();
    		Handler handlerN=new ConcreteHandlerN();
    		//链起来
    		handler1.setSeccessor(handler2);
    		handler2.setSeccessor(handlerN);
    		//假设这个请求不是1、2的责任
    		handler1.handlerQequest("执行到最后");
    	}
    
    }
    

    结果:

    处理器1不处理...
    处理器2不处理...
    处理器N处理...
    
  • 相关阅读:
    linux rar安装
    ce
    Hp培训学习注册攻略
    Novell云计算
    bigdata
    Quest *nix Xwindows
    Foglight 5.6.7 控制台jboss报404
    view
    架构-数据库访问-SQL语言进行连接数据库服务器-DB-Library:DB-Library
    架构-数据库访问-SQL语言进行连接数据库服务器:SQL语言进行连接数据库服务器
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5089260.html
Copyright © 2011-2022 走看看