(设计模式)模板方法

模板方法:定义好一个执行模板(骨架),然后将一些动态的流程和数值参数化,这样就可以根据不同的参数产生不同的结果。

例如:JDK 的 AQS(AbstractQueueSynchronizer) 就是采用了模板方法模式。AQS 已经定义好线程同步的流程和细节,只有五个方法是没有实现的,由子类负责具体实现,这 5 各方式如下:

这 5 个方法的作用就是约束线程应该以什么样的方式来获取和释放 “资源”。多线程运行时,必定面临资源不够的情况,此时 AQS 的 四个方法(try 开头)就是用于以独占还是共享的方式来获取资源。因为 AQS 不负责实现这四个方法,我就以 AQS 的一个子类 CountDownLatch 为例,如下:

CountDownLatch 继承 AQS,并实现 tryAcquireShared 和 tryRealseShared 两个方法,定义了资源该如何获取,最后 AQS 就会根据 CountDownLatch 的这两个方法从而决定后面的执行流程。如下 AQS 的 doAcquireShared 方法:

模式分析:

1、将不变与变化的分离,并将不变的模板化,变化的参数化,形成一个模板,极大地提高模板利用率的同时,还能够结合具体的参数产生不同的结果。

posted @ 2021-05-30 21:16  多元思维的开发者  阅读(52)  评论(0编辑  收藏  举报