模板方法定义了算法的步骤,并允许子类为一个或多个步骤提供实现;
模板方法模式:
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类实现,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤;
钩子方法
如下代码,钩子,可以让子类实现模板算法中的可选部分,或者在钩子对子类的实现不重要的时候,子类可对钩子置之不理。
Android Activity 的生命周期方法,就是 模板方法模式的体现,很多方法,是钩子方法;
示例代码如下:
public abstract class AbsTemplete {
// 算法的步骤,为避免子类修改,申明成 final 类型
protected final void prepareRecipe() {
primitiveOperation1();
primitiveOperation2();
if(customerInput()) {
hook();
}
concreteOperation();
}
protected boolean hook() {
return true;
}
protected abstract void primitiveOperation1();
// 供子类实现
protected abstract void primitiveOperation2();
// 默认实现
public void concreteOperation() {
System.out.println("concreteOperation ");
}
// 钩子方法
void hook() {
}
}
Arrays.sort() 就是一个模板方法模式的体现,只不过他没有使用到继承;有点类似策略模式,但不是策略模式,策略模式通过组合提供了一整套算法,而模板并不是;
网友评论