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

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。

    在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

    意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

    主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。

    何时使用:在处理消息的时候以过滤很多道。

    如何解决:拦截的类都实现统一接口。

    关键代码:Handler 里面聚合它自己,在 HanleRequest 里判断是否合适,如果没达到条件则向下传递,向谁传递之前 set 进去。

    package ttyouni.main;
    
    public abstract class AbstractLogger {
        protected AbstractLogger nextLogger;
    
        public AbstractLogger getNextLogger() {
            return nextLogger;
        }
    
        public void setNextLogger(AbstractLogger nextLogger) {
            this.nextLogger = nextLogger;
        }
        abstract void log(String message);    
    }
    
    class ConsoleLogger extends AbstractLogger
    {
        @Override
        void log(String message) {
            // TODO Auto-generated method stub
            System.out.println("Console:"+message);
            if(nextLogger !=null){
                nextLogger.log( message);
            }
        }    
    }
    
    class FileLogger extends AbstractLogger
    {
        @Override
        void log(String message) {
            // TODO Auto-generated method stub
            System.out.println("File:"+message);
            if(nextLogger !=null){
                nextLogger.log( message);
            }
        }
        
    }
    View Code
            AbstractLogger logger1=new ConsoleLogger();
            AbstractLogger logger2=new FileLogger();
            logger1.setNextLogger(logger2);
            logger1.log("message");
    main
  • 相关阅读:
    POJ 1300 Open Door
    POJ 2230 Watchcow
    codevs 1028 花店橱窗布置
    codevs 1021 玛丽卡
    codevs 1519 过路费
    codevs 3287 货车运输
    codevs 3305 水果姐逛水果街二
    codevs 1036 商务旅行
    codevs 4605 LCA
    POJ 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/liandy0906/p/7270621.html
Copyright © 2011-2022 走看看