【工具】Google Guava

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


 使用:

常用开发库:参考 https://pdai.tech/md/develop/package/dev-package-x-google-guava.html

  • 基本工具 [Basic utilities]
  • 集合[Collections]
  • 缓存[Caches]
  • 函数式风格[Functional idioms]
  • 并发[Concurrency]
  • 字符串处理[Strings]
  • 原生类型[Primitives]
  • 区间[Ranges]
  • I/O
  • 散列[Hash]
  • 事件总线[EventBus]
  • 数学运算[Math]
  • 反射[Reflection]

 

Event Bus: 单机版本的生产、消费者模式

Guava RateLimiter :基于令牌桶的单机限流。https://cloud.tencent.com/developer/article/1891525  含基于切面的实现样例 

 

内部设计模式

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
复制代码

  

posted @   飞翔在天  阅读(280)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示