建造者模式(Builder pattern)(其表现形式就是可以链式调用?):
JDK中的StringBuilder.append
Spring的拦截器的InterceptorRegistration.addPathPatterns/excludePathPatterns
5.2.2 手写MyBatis7:53: ?
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
模板方法模式:AbstractQueuedSynchronizer抽象类中定义了一系列方法,如acquire方法:
public final void acquire(int arg) {
if (!tryAcquire(arg) &&
acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
selfInterrupt();
}
而 它调用的tryAcquire方法并未实现:
protected boolean tryAcquire(int arg) {
throw new UnsupportedOperationException();
}
而是在子类中实现。比如在ReentrantLock中的static final class FairSync
的实现:
protected final boolean tryAcquire(int acquires) {
...
装饰器模式:
-
《Java并发编程实战》p55: Collections.synchronizedList synchronizedMap :
The basic collection classes such as ArrayList and HashMap are not thread safe, but the class library provides wrapper factory methods (Collections.synchronizedList and friends) so they can be used safely in multithreaded environments. These factories use the Decorator pattern to wrap the collection with a synchronized wrapper object; the wrapper implements each method of the appropriate interface as a synchronized method that forwards the request to the underlying collection object. -
java io
-
org.apache.ibatis.session.Configuration中: (参考5.2.3 MyBatis核心源码分析 25:19)
//如果要求缓存,生成另一种CachingExecutor(默认就是有缓存),装饰者模式,所以默认都是返回CachingExecutor
if (cacheEnabled) {
executor = new CachingExecutor(executor);
}
MyBatis中的设计模式 (from 5.2.3 MyBatis核心源码分析 末段)如下图。其中的ErrorContext用到ThreadLocal实现单例模式,有趣
责任链模式:
《第五章【拓展进阶(上)】框架源码》之《第二节 Mybatis框架原理》中有提到list式的
5.4.2 责任链设计模式,关于netty,有提到链表式的
工厂模式:
-
《专题四 服务化改造》之《第三章 分布式系统解耦》之《第五节 常见消息中间件介绍》之3.5.2 kafka技术架构和配置介绍 81:50 提到spring kafka创建consumerFactory:
-
《Java Concurrency in Practice》:
You can create a thread pool by calling one of the static factory
methods in Executors: newFixedThreadPool.
门面模式:
1.logback、log4j:是日志实现框架,实现怎么记录日志的。 2.slf4j:提供了java中所有的日志框架的简单抽象(日志的门面设计模式),说白了就是一个日志API(没有实现类),它不能单独使用