• 责任链模式/chain of responsibility/行为型模式


    职责链模式 chain of responsibility

    意图

    使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

    动机

    给多个对象处理一个请求的机会,从而解耦发送者和请求者。

    从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者。提交请求的对象并不明确地知道哪一个对象将会处理它,可以当做是一个隐式接受者。
    沿着链发送请求,并保证接受者为隐式的,每个链上的对象都有一致的处理请求和访问链上后继者的接口。

    java实现三要素: 接口(处理请求+后继链)+具体实现(能处理请求就处理,否则转给后继链)

    优点:
    降低耦合,简化对象链接,仅需保持一个指向后继者的引用。

    注意点:
    链接上的请求可以是一条链,可以是一个树,还可以是一个环,模式本身不约束这个,需要我们自己去实现,同时,在一个时刻,命令只允许由一个对象传给另一个对象,而不允许传给多个对象。

    代码实现

    /**
     * 定义操作和获得后继链
     *
     */
    public interface Handler {
        void handle();
    
    	Handler getNextHandler();
    }
    
    
    public class Handler1 implements Handler{
        private Handler handler=new Handler2(); 
    	
    	@Override
    	public void handle() {
    		System.out.println("this is handler 1.");
    		if (getNextHandler()!=null) {//有后继,则往后传递
    			getNextHandler().handle();
    		}
    	}
    
    	@Override
    	public Handler getNextHandler() {
    		return handler;
    	}
    }
    
    public class Handler2 implements Handler{
        
    	@Override
    	public void handle() {
    		System.out.println("this is handler 2.");
    		if (getNextHandler()!=null) {
    			getNextHandler().handle();//无后继,终止。
    		}
    	}
    
    	@Override
    	public Handler getNextHandler() {
    		return null;
    	}
    }
    
    //测试
    public class Test {
    
        public static void main(String[] args) {
    		Handler handler=new Handler1();
    		handler.handle();
    	}
    }
    
    

    JDK中的责任链模式

    把一个对象在一个链接传递直到被处理。在这个链上的所有的对象有相同的接口(抽象类)但却有不同的实现。
    java.util.logging.Logger#log()
    javax.servlet.Filter#doFilter()

  • 相关阅读:
    JS播放视频代码
    kubernetes系列(小知识):kubectl命令自动补全
    docker(部署常见应用):docker部署mysql
    docker(部署常见应用):docker部署nginx
    docker(二):CentOS安装docker
    docker(一):docker是什么?
    kubernetes系列:(二)、kubernetes部署mysql(单节点)
    越早明白越好的人生道理(转载)
    JetBrains系列IDE快捷键大全(转载)
    spring-boot系列:(一)整合dubbo
  • 原文地址:https://www.cnblogs.com/lknny/p/5912959.html
Copyright © 2020-2023  润新知