目录
一、模板方法(通过继承封装算法)定义
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类在不改变算法结构的情况下,从新定义算法中的某些步骤。
1、“模板方法”定义了算法的步骤,把这些步骤的实现延迟到子类;
2、模板方法的抽象类可以定义具体的方法,抽象的方法和钩子;
3、抽象方法由子类实现;
4、钩子是一种方法,它在抽象类中不做事或者只做默认的事,子类可以选择要不要去覆盖它;
5、为了防止子类改变模板中的算法,可以将模板方法声明为final;
6、工厂方法是模板方法的一种特殊版本;
二、特点
1、设计原则
好莱坞原则:别调用我们,我们会调用你
2、应用实例(AQS)
三、模板方法的格式
public abstract class AbstractClass {
//模板方法
final void templateMethod() {
primitiveOperative1();//抽象的方法
primitiveOperative2(); //抽象的方法
concreteOperative(); //具体的方法
hook(); //钩子 空方法
}
//子类需要实现的抽象方法
abstract void primitiveOperative1();
abstract void primitiveOperative2();
final void concreteOperative() {
//具体实现
}
//钩子函数,子类可以自己决定要不要覆盖
void hook() {}
}
参考:
《head first 设计模式》