Java设计模式之模板模式

模式定义
定义一个操作中的算法框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

使用场景
1.多个子类有公有的方法,并且逻辑基本相同。
2.重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
3.重构时,模板方法模式是一个经常使用的模式,把相同的代码抽到父类中,然后通过钩子函数约束其行为。

示例:

public abstract class AbstractPerson {

    protected void eat(){
        System.out.println("吃饭");
    }

    protected void dosomething(){
        System.out.println("上班");
    }

    protected void gohome(){
        System.out.println("回家");
    }

    protected void sleep(){
        System.out.println("睡觉");
    }

    public final void start(){
        eat();
        dosomething();
        gohome();
        sleep();
    }
}

public class Teacher extends AbstractPerson{

    @Override
    protected void dosomething() {
        System.out.println("去学校上课");
    }

}

public class Worker extends AbstractPerson{

    @Override
    protected void dosomething() {
        System.out.println("去公司上班");    
    }
}

public class Main {
    public static void main(String[] args) {
        Teacher teacher=new Teacher();
        teacher.start();
        System.out.println("-------------");
        Worker worker=new Worker();
        worker.start();
    }
}

运行结果:
Java设计模式之模板模式_第1张图片

通过上面代码,主要定义了一个抽象类AbstractPerson,里面有4个方法,这4个方法大家可以理解为是一个流程,也就是一种模板模式,模板方法里面默认实现的方法如果不满足当前的子类,子类可以重写该方法,这样就做到了不改变算法结构,具体实现交给子类完成。

优点
封装不变部分,扩展可变部分
提取公共部分代码,便于维护

缺点
模板方法会带来代码阅读的难度,会让心觉得难以理解。

参考:
Android 设计模式源码解析

你可能感兴趣的:(java设计模式,模板模式)