设计模式-模板模式
概念
- 把公共的代码抽取出来,如果该功能是不确定的,那我们将其修饰成抽象方法。
- 将几个固定步骤的功能封装到一个方法中,对外暴露这个方法,就可以非常方便调用了。
优点
- 封装不变的部分,扩展可变的部分。把认为是不变的部分的算法封装到父类,可变部分的交由子类来实现。
- 提取公共部分的代码,行为由父类控制,子类实现。
缺点
抽象类定义了部分抽象方法,这些抽象的方法由子类来实现,子类执行的结果影响了父类的结果(子类对父类产生了影响),会带来阅读代码的难度。AQS
AQS其实就是一个可以给我们实现锁的框架。内部实现的关键是:先进先出的队列、state状态AQS定义的acquire()
public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt(); }