设计模式-模版方法模式

模版方法模式

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

模版方法模式图例

模版方法模式.png

模版方法模式的举例

抽象父类代码

public abstract class AbstractTemplate {
    //模版执行方法
    public final void execTask() {
        init();
        load();
        exec();
        end();
    }
    protected void init(){
        print("init()");
    }

    protected void load(){
        print("load()");
    }

    protected abstract void exec();

    protected abstract void end();

    protected void print(String value) {
        System.out.println(getClass().getSimpleName() + " print " + value);
    }

}

具体实现子类代码

Task1Template.java

public class Task1Template extends AbstractTemplate {
    @Override
    protected void exec() {
        print("exec()");
    }
    @Override
    protected void end() {
        print("end()");
    }
}

Task2Template.java

public class Task2Template extends AbstractTemplate {
    @Override
    protected void exec() {
        print("exec()");
    }
    @Override
    protected void end() {
        print("end()");
    }
}

测试类代码

public class TemplateApplication {

    public static void main(String[] args) {
        AbstractTemplate abstractTemplate1 = new Task1Template();
        abstractTemplate1.execTask();

        AbstractTemplate abstractTemplate2 = new Task2Template();
        abstractTemplate2.execTask();
    }
}

执行结果

Task1Template print init()

Task1Template print load()

Task1Template print exec()

Task1Template print end()

Task2Template print init()

Task2Template print load()

Task2Template print exec()

Task2Template print end()

模版方法模式的应用场景

  1. 多个子类有公有的方法,并且逻辑基本相同时。

  2. 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。

  3. 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在阎宏博士的《JAVA与模式》一书中开头是这样描述模板方法(Template Method)模式的:模板方法模式是...
    Ant_way阅读 331评论 0 0
  • UML关系简单介绍UML简单使用的介绍创建型设计模式Android设计模式-单例模式Android设计模式-工厂模...
    星宇V阅读 387评论 0 4
  • 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算...
    莮亾阅读 728评论 0 1
  • 看山是山,看水是水;看山不是山,看水不是水;看山仍是山,看水仍是水。 当我长时间盯着一个字的时候,就会发现对这个字...
    愚者大志阅读 748评论 2 3
  • 华丽的开始 氛围的营造 一个有血有肉有故事的人儿 怀揣着一颗消极忧郁的心 带着依旧留存的爱 上演一场不可避免的劫遇...
    翱蓝阅读 222评论 0 0