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