首页 > 其他 > 详细

【23种设计模式】之模板方法模式——Template Method

时间:2019-05-20 01:30:15      阅读:140      评论:0      收藏:0      [点我收藏+]

Template Method

一、定义

定义一个操作中算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。

Template Method 使得子类可以不改变(复用)一个算法的结构,即可重定义(override重写)该算法的某些特定步骤。

二、假设场景

业务流程分五步,框架里面有固定的流程step1,step3,step5,应用程序使用框架,并自己编写其中的step2,step4

1、传统思路
//框架类
public class Template1_lib {

    void step1(){
        System.out.println("step1");
    }
    void step3(){
        System.out.println("step3");
    }
    void step5(){
        System.out.println("step5");
    }
}

 

 //框架类

public class Template1_lib {
?
    void step1(){
        System.out.println("step1");
    }
    void step3(){
        System.out.println("step3");
    }
    void step5(){
        System.out.println("step5");
    }
}
//应用程序类
public class Template1_app {
    boolean step2(){
        return true;
    }
    void step4(){
        System.out.println("step4");
    }
?
    /*
    模拟程序流程
     */
    public static void main(String[] args) {
        Template1_lib lib = new Template1_lib();
        Template1_app app = new Template1_app();
?
        lib.step1();
?
        if(app.step2()){
            lib.step3();
        }
?
        for(int i=0;i<4;i++){
            app.step4();
        }
?
        lib.step5();
    }
}

 

 

2、模板模式
public abstract class Template2_lib {
?
    protected void step1(){
        System.out.println("step1");
    }  //稳定
    protected void step3(){
        System.out.println("step3");
    }  //稳定
    protected void step5(){
        System.out.println("step5");
    }  //稳定
?
    //抽象方法
    public abstract boolean step2();   //变化,由子类实现
    public abstract void step4();      //变化,由子类实现
?
    //稳定流程骨架
    public void run(){
        step1();
?
        if(step2()){
            step3();
        }
?
        for(int i=0;i<4;i++){
            step4();
        }
?
        step5();
    }
}
public class Template2_app extends Template2_lib{
    @Override
    public boolean step2(){
        return true;   //子类重写实现
    }
?
    @Override
    public void step4(){
        System.out.println("step4"); //子类重写实现
    }
?
    /*
    模拟程序流程
     */
    public static void main(String[] args) {
        Template2_lib lib = new Template2_app();  //多态
?
        lib.run();
    }
?

技术分享图片

三、总结

非常基础,常用

机制简洁,为很多应用程序框架提供了灵活的扩展点,

“不要调用我,让我来调用你”,反向控制

 

变化点与稳定点分离

 

 

【23种设计模式】之模板方法模式——Template Method

原文:https://www.cnblogs.com/tingtingzhou/p/10671991.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!