05 2021 档案
摘要:模板方法:定义好一个执行模板(骨架),然后将一些动态的流程和数值参数化,这样就可以根据不同的参数产生不同的结果。 例如:JDK 的 AQS(AbstractQueueSynchronizer) 就是采用了模板方法模式。AQS 已经定义好线程同步的流程和细节,只有五个方法是没有实现的,由子类负责具体实
阅读全文
摘要:命令模式:将需要执行的流程封装成一个任务(命令),然后提交给执行器(命令执行者)执行。 例如:JDK 线程池里的 Execultor 就是采用了命令模式,Executor 是命令执行者,Runnable 是命令,Executor 里的 execute 方法传入的参数就是 Runnable,如下: R
阅读全文
摘要:观察者模式:主要涉及两个对象,主题(被观察者)、观察者。如果主题发生变化,那么就会通知所有订阅该主题的观察者。 例子:JDK 中有一套通用的观察者模式模板。那就是 Observable (可观察) 和 Observer (观察者),它们的关系如下: 主题可以被很多观察者订阅,所以主题与观察者是一对多
阅读全文
摘要:迭代器是用来遍历容器的工具,迭代器内部封装了容器遍历的细节。 因为容器可能比较多,而且结构也可能各不相同,例如有:数组、哈希表、链表、跳表、红黑树、多路树、图等等。因此,每种容器一般都会提供各自的迭代器,用于遍历容器里的数据。 每种容器都有自己的迭代器,但如果每种迭代器接口不统一,那么使用成本极高,
阅读全文
摘要:策略模式:针对不同的情况和场景,使用相应的处理策略。不同的策略,处理的逻辑各不相同。 例如;在 JDK 的线程池配置参数里面,就有一个拒绝策略的参数。这个拒绝策略是线程池最后保险机制,一旦线程池处理请求达到饱和就会触发拒绝策略,而线程池默认的拒绝策略就是丢弃策略(AbortPolicy),除此之外还
阅读全文
摘要:装饰器模式:在原有的功能附加额外的功能,从而扩展和强化已有的功能,同时也保留着原有功能的效果。 例如:JDK 的 IO 包里,就有很多装饰器的例子。如下 InputStream 的 UML 图: InputStream 是所有输入流的顶级抽象基类,其中定义了最基本的 read 方法,负责读取数据,如
阅读全文

浙公网安备 33010602011771号