定义
模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
代码演示
public abstract class Query {
//模板方法
public void query(){
open();
realQuery();
if (needClose()){
close();
}
}
//具体方法
private void open(){
Log.i(TAG, "open");
}
//抽象方法
public abstract void realQuery();
//钩子方法
public boolean needClose(){
return true;
}
//钩子方法
public void close(){
}
}
Query类中定义了query方法,假设无论何种查询,open的操作都是一样的,那么open方法就定义为私有的。而查询操作是核心,不同的查询实现肯定不一样,所以在这里定义为抽象方法,由子类自己去实现。假设关闭操作可做可不做,那么定义close为空实现,如果子类需要关闭,那么由他自己去实现,如果不需要关闭,那么子类无需重写。因为关闭操作可有可无,那么我们可以定义一个返回布尔值的方法来控制close是否执行,这个被成为钩子方法。
实际运用
activity启动流程中,handleStartActivity方法就属于模板方法,onCreate方法会在这其中执行,而他是一个空实现,具体逻辑需要开发者自己去实现,这就属于钩子方法。其他生命周期的方法也是一个道理。
Handler中的dispatchMessage方法也属于模板方法handleMessage方法会在其中执行,而他是一个空实现,handleMessage方法也属于钩子方法。
其实模板方法模式就是基于集成的代码复用,所以特别适合有需要基类的地方。比如我们会用baseActivty,那么一些通用的方法可以作为模板方法定义在里面,方法里又去调用一些钩子方法或抽象方法,具体实现在子类Activity。比如页面是否是沉浸式,是否需要标题栏等等。
网友评论