zoukankan      html  css  js  c++  java
  • 设计学习-3

     拦截器设计学习,来自flume,基本看代码就懂,这种设计非常普遍

    public interface Interceptor {
    
      public void initialize();
    
      public Event intercept(Event event);
    
      public List<Event> intercept(List<Event> events);
    
      public void close();
    
      public interface Builder extends Configurable {
        public Interceptor build();
      }
    }
    public class HostInterceptor implements Interceptor {
    
      private static final Logger logger = LoggerFactory
              .getLogger(HostInterceptor.class);
    
      private final boolean preserveExisting;
      private final String header;
      private String host = null;
    
      private HostInterceptor(boolean preserveExisting,
          boolean useIP, String header) {
        this.preserveExisting = preserveExisting;
        this.header = header;
        InetAddress addr;
        try {
          addr = InetAddress.getLocalHost();
          if (useIP) {
            host = addr.getHostAddress();
          } else {
            host = addr.getCanonicalHostName();
          }
        } catch (UnknownHostException e) {
          logger.warn("Could not get local host address. Exception follows.", e);
        }
    
      }
    
      @Override
      public void initialize() {
        // no-op
      }
    
      @Override
      public Event intercept(Event event) {
        Map<String, String> headers = event.getHeaders();
    
        if (preserveExisting && headers.containsKey(header)) {
          return event;
        }
        if (host != null) {
          headers.put(header, host);
        }
    
        return event;
      }
    
      @Override
      public List<Event> intercept(List<Event> events) {
        for (Event event : events) {
          intercept(event);
        }
        return events;
      }
    
      @Override
      public void close() {
        // no-op
      }
    
      /**
       * Builder which builds new instances of the HostInterceptor.
       */
      public static class Builder implements Interceptor.Builder {
    
        private boolean preserveExisting = PRESERVE_DFLT;
        private boolean useIP = USE_IP_DFLT;
        private String header = HOST;
    
        @Override
        public Interceptor build() {
          return new HostInterceptor(preserveExisting, useIP, header);
        }
    
        @Override
        public void configure(Context context) {
          preserveExisting = context.getBoolean(PRESERVE, PRESERVE_DFLT);
          useIP = context.getBoolean(USE_IP, USE_IP_DFLT);
          header = context.getString(HOST_HEADER, HOST);
        }
    
      }
    
      public static class Constants {
        public static String HOST = "host";
    
        public static String PRESERVE = "preserveExisting";
        public static boolean PRESERVE_DFLT = false;
    
        public static String USE_IP = "useIP";
        public static boolean USE_IP_DFLT = true;
    
        public static String HOST_HEADER = "hostHeader";
      }
    
    }
    public class InterceptorChain implements Interceptor {
      private List<Interceptor> interceptors;
      public InterceptorChain() {
        interceptors = Lists.newLinkedList();
      }
    
      public void setInterceptors(List<Interceptor> interceptors) {
        this.interceptors = interceptors;
      }
    
      @Override
      public Event intercept(Event event) {
        for (Interceptor interceptor : interceptors) {
          if (event == null) {
            return null;
          }
          event = interceptor.intercept(event);
        }
        return event;
      }
    
      @Override
      public List<Event> intercept(List<Event> events) {
        for (Interceptor interceptor : interceptors) {
          if (events.isEmpty()) {
            return events;
          }
          events = interceptor.intercept(events);
          Preconditions.checkNotNull(events,
              "Event list returned null from interceptor %s", interceptor);
        }
        return events;
      }
    
      @Override
      public void initialize() {
        Iterator<Interceptor> iter = interceptors.iterator();
        while (iter.hasNext()) {
          Interceptor interceptor = iter.next();
          interceptor.initialize();
        }
      }
    
      @Override
      public void close() {
        Iterator<Interceptor> iter = interceptors.iterator();
        while (iter.hasNext()) {
          Interceptor interceptor = iter.next();
          interceptor.close();
        }
      }
    }
  • 相关阅读:
    思路不够清晰
    深思不够
    [Android学习笔记]理解焦点处理原理的相关记录
    移动端自动化测试(二)之 Appium常用的API(python)函数介绍
    移动端自动化测试(一)之 Appium+Pyhton环境准备篇
    如何修改上线网站
    sublime如何自动保存
    自动化元素定位
    OC 字典 存储联系人信息 求大神优化代码
    我的第一个字典-Dictionary
  • 原文地址:https://www.cnblogs.com/it-worker365/p/9890784.html
Copyright © 2011-2022 走看看