模板办法:定义好一个执行模板(骨架),而后将一些动静的流程和数值参数化,这样就能够依据不同的参数产生不同的后果。
例如:JDK 的 AQS(AbstractQueueSynchronizer)就是采纳了模板办法模式。AQS 曾经定义好线程同步的流程和细节,只有五个办法是没有实现的,由子类负责具体实现,这 5 各形式如下:
这 5 个办法的作用就是束缚线程应该以什么样的形式来获取和开释“资源”。多线程运行时,必然面临资源不够的状况,此时 AQS 的 四个办法(try 结尾)就是用于以独占还是共享的形式来获取资源。因为 AQS 不负责实现这四个办法,我就以 AQS 的一个子类 CountDownLatch 为例,如下:
CountDownLatch 继承 AQS,并实现 tryAcquireShared 和 tryRealseShared 两个办法,定义了资源该如何获取,最初 AQS 就会依据 CountDownLatch 的这两个办法从而决定前面的执行流程。如下 AQS 的 doAcquireShared 办法:
模式分析:
1、将不变与变动的拆散,并将不变的模板化,变动的参数化,造成一个模板,极大地提高模板利用率的同时,还可能联合具体的参数产生不同的后果。