zoukankan      html  css  js  c++  java
  • 【三方件】Google Guava

    Guava:Google工具类库,https://github.com/google/guava

    内部设计模式

    1、Builder模式:参数较多时,通过构造函数太多变量且部分参数可能不需要且多参数联合校验问题,解决方案:1)使用Builder模式;2)无参构造函数创建对象+ setXXX()方法来逐一设置需要的设置的成员变量。

      缓存部分:CacheBuilder

    1  Cache<String, String> cache = CacheBuilder.newBuilder()
    2             .initialCapacity(100)
    3             .maximumSize(1000)
    4             .expireAfterWrite(10, TimeUnit.MINUTES)
    5             .build();
    6 
    7     cache.put("key1", "value1");
    8     String value = cache.getIfPresent("key1");
    9     System.out.println(value);

    2、Wrapper模式(代理模式、装饰器、适配器):

      AddLoggingCollection<E> 基于代理模式,在原始Collection基础上增加add相关操作;

      该代理类没有直接实现原始接口而是通过集成ForwardXXX原因:为了简化Wrapper模式的代码实现,Guava提供一系列缺省的ForwardingXXXX类。用户在实现自己的Wrapper类的时候,基于缺省Forwarding类扩展,可只实现自己关心的方法,其他不关心的方法使用缺省Forwarding类实现,

    public class AddLoggingCollection<E> extends ForwardingCollection<E> {
      private static final Logger logger = LoggerFactory.getLogger(AddLoggingCollection.class);
      private Collection<E> originalCollection;
    
      public AddLoggingCollection(Collection<E> originalCollection) {
        this.originalCollection = originalCollection;
      }
    
      @Override
      protected Collection delegate() {
        return this.originalCollection;
      }
    
      @Override
      public boolean add(E element) {
        logger.info("Add element: " + element);
        return this.delegate().add(element);
      }
    View Code

      Wrapper常规实现框架:  

    public interface Interf {
      void f1();
      void f2();
    }
    public class OriginalClass implements Interf {
      @Override
      public void f1() { //... }
      @Override
      public void f2() { //... }
    }
    
    public class WrapperClass implements Interf {
      private OriginalClass oc;
      public WrapperClass(OriginalClass oc) {
        this.oc = oc;
      }
      @Override
      public void f1() {
        //...附加功能...
        this.oc.f1();
        //...附加功能...
      }
      @Override
      public void f2() {
        this.oc.f2();
      }
    }
    View Code

      

      

     

  • 相关阅读:
    百度面试面经
    为什么配置环境变量
    第一、二、三范式 AND BCNF AND 4NF
    三次握手四次挥手
    Bootrap 项目实战(微金所前端首页)第三部分(CSS,js源码)
    Bootrap 项目实战(微金所前端首页)第二部分(首页源码)
    Bootrap 项目实战(微金所前端首页)第一部分
    CSS z-index在ie67中不起作用
    CSS 加号选择器("+")
    CSS的nth-of-type和nth-child的区别
  • 原文地址:https://www.cnblogs.com/clarino/p/15729803.html
Copyright © 2011-2022 走看看