一些设计模式的实例

建造者模式(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,有提到链表式的

工厂模式

You can create a thread pool by calling one of the static factory
methods in Executors: newFixedThreadPool.

门面模式
1.logback、log4j:是日志实现框架,实现怎么记录日志的。 2.slf4j:提供了java中所有的日志框架的简单抽象(日志的门面设计模式),说白了就是一个日志API(没有实现类),它不能单独使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_23204557

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值