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

      

      

     

  • 相关阅读:
    347. 前 K 个高频元素(桶排序、堆排序)
    322. 零钱兑换 && 416. 分割等和子集(0-1背包问题)
    739. 每日温度 && 503. 下一个更大元素 II (单调栈)
    1110. 删点成林
    个人纪录
    pub get failed (server unavailable) -- attempting retry 1 in 1 second?
    python 遍历文件夹重命名
    flutter vscode 连接iphone失败
    部署以太坊合约
    Web漏洞扫描工具AppScan10介绍
  • 原文地址:https://www.cnblogs.com/clarino/p/15729803.html
Copyright © 2011-2022 走看看