zoukankan      html  css  js  c++  java
  • 责任链模式(Chain of Responsibility Pattern)

    责任链模式:可以为某个请求创建一个对象链。每个对象依序检查此请求,并对其处理,或者把它传给链中的下一个对象。

    责任链上的对象负责处理请求,客户只需要将请求发送到责任链上即可,无需关心处理的细节和请求的传递,所以请求的发送者和接收者解耦了。

    类图:

    具体例子:

     

    一个Logger日志抽象类,三个具体日志类继承Logger,责任链的顺序是HighestLogger->MiddleLogger->OrdinaryLogger()(顺序是自己定的,可以从高级到低级也可以低级到高级,看具体实现)

     为了判断日志的级别,定义三个常量,HIGH=3,MIDDLE=2,LOW=1

    public abstract class Logger {
        public static final int HIGH = 3;
        public static final int MIDDLE =2;
        public static final int LOW =1;
        Logger nextLogger;
        public void log(int level);
        public void setNextLogger(Logger l) {
            nextLogger = l;
        }
    }
    
    public class HighestLogger extends Logger {
        public void log(int level){
            if(level == HIGH) {
                   System.out.println("HIGH Log");
        } else if(nextLogger != null){
    nextLogger.log(level);

    } }

    public class MiddleLogger extends Logger {
        public void log(int level){
            if(level == MIDDLE) {
                   System.out.println("MIDDLE Log");
        } else if(nextLogger != null){
    nextLogger.log(level);

    } }



    public class OrdinaryLogger extends Logger {
        public void log(int level){
            if(level == LOW) {
                   System.out.println("LOW Log");
        } else if(nextLogger != null){
    nextLogger.log(level);

    } }
     
    Logger hLogger = new HighLogger();
    Logger mLogger = new MiddleLogger();
    Logger lLogger = new OrdinaryLogger();
    
    hLogger.setNextLogger(mLogger);
    mLogger.setNextLogger(lLogger);
    
    hLogger.log(HIGH);
    hLogger.log(MIDDLE);
    hLogger.log(LOW);

    hLgger作为责任链的链头,如果日志等级不是HIGH,它就调用下一个节点的log,以此类推,如果直到链尾也不能处理,就会丢失这个请求,当然也可以让链尾来处理所有未能被前面的对象处理的请求。

  • 相关阅读:
    C# 动态装载 DLL
    【网摘阅读】舒迅:产品经理必读的九步法
    闲谈造楼与软件测试
    文章阅读
    【原】浅谈测试和产品
    【产品经理】用户体验时代的9条建议
    【产品经理】产品经理的十大顶级错误
    头皮溢脂性皮炎推荐联合治疗:采乐50ml+希尔生100g(请看详情页)维生素B2维生素B6
    月入万元或不需缴税!九张图带你看懂个税新规
    美国比较好的保健品推荐
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5579187.html
Copyright © 2011-2022 走看看