模板模式
一、简介
模板模式即定一个操作中的算法骨架,将具体的算法细节延迟到子类中实现。这样可以使得子类不改变一个算法的结构即可定义该算法的某些特定实现细节。具体可以看如下类图:
二、实现案例
例如我们需要对电脑的启动过程进行设计,我们假设电脑的启动大致有开启电源、硬件检测、启动操作系统三个主要步骤,但是对于不同的硬件设备、不同的操作系统,具体的硬件检测及操作系统启动是不同的,这时候我们可以考虑使用模板模式来解决这一问题。
下面定义一个AbstractComputer抽象模板类,如下:
public abstract class AbstractComputer {
public abstract void powerOn();
public abstract void checkHardware();
public abstract void loadOS();
public void start(){
powerOn();
checkHardware();
loadOS();
System.out.println("启动完成...");
}
}
那么对于电脑ComputerA只需继承该抽象类,分别实现对应的方法,最后调用start即可启动电脑,示例如下:
public class ComputerA extends AbstractComputer{
@Override
public void powerOn() {
System.out.println("开启电源...");
}
@Override
public void checkHardware() {
System.out.println("检查硬件...");
}
@Override
public void loadOS() {
System.out.println("启动操作系统...");
}
}
下面看看具体测试代码:
public class MainTest {
public static void main(String []args){
AbstractComputer computer = new ComputerA();
computer.start();
}
}
输出如下:
开启电源...
检查硬件...
启动操作系统...
启动完成...
三、模板模式在Android中的应用
1)AsyncTask类
我们在使用AsyncTask的时候,主要实现了其中onPreExecute、doInBackground、onPostExecute等方法,在不同的方法中实现不同的操作,当执行execute方法后,上面三个方法会依次执行。
2)Android中Activity的生命周期等
四、应用场景
1、多个子类具有共有的方法,并且逻辑基本相同;
2、对于某一个复杂的算法,当需要拆解成多个步骤时,有子类来实现每个步骤。
五、参考文献
《大话设计模式》
《Android源码设计模式解析与实战》