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处理...
    
  • 相关阅读:
    记某app内购破解 – 安卓逆向菜鸟的初体验
    初探Android逆向:通过游戏APP破解引发的安全思考
    用IKVMC将jar转成dll供c#调用
    Java与.net 关于URL Encode 的区别
    RSA加密、解密、签名、验签的原理及方法
    C#使用SHA1加密类(RSAFromPkcs8)支持1024位和2048位私钥
    java与.net平台之间进行RSA加密验证
    RSA密钥,JAVA与.NET之间转换
    全面解决.Net与Java互通时的RSA加解密问题,使用PEM格式的密钥文件
    Android中Activity的启动模式(LaunchMode)和使用场景
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5089260.html
Copyright © 2011-2022 走看看