设计模式-模板模式

发布时间 2024-01-02 23:18:10作者: 轻寒

概念

  • 把公共的代码抽取出来,如果该功能是不确定的,那我们将其修饰成抽象方法。
  • 将几个固定步骤的功能封装到一个方法中,对外暴露这个方法,就可以非常方便调用了。

优点

  • 封装不变的部分,扩展可变的部分。把认为是不变的部分的算法封装到父类,可变部分的交由子类来实现。
  • 提取公共部分的代码,行为由父类控制,子类实现。

缺点

抽象类定义了部分抽象方法,这些抽象的方法由子类来实现,子类执行的结果影响了父类的结果(子类对父类产生了影响),会带来阅读代码的难度。

AQS

AQS其实就是一个可以给我们实现锁的框架。内部实现的关键是:先进先出的队列、state状态

AQS定义的acquire()

public final void acquire(int arg) {
if (!tryAcquire(arg) &&
acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
selfInterrupt();
}
acquire()相当于模板方法,tryAcquire(arg)相当于基本方法。