博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【23种设计模式】之模板方法模式——Template Method
阅读量:5115 次
发布时间:2019-06-13

本文共 2138 字,大约阅读时间需要 7 分钟。

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();    }​

三、总结

非常基础,常用

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

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

 

变化点与稳定点分离

 

 

转载于:https://www.cnblogs.com/tingtingzhou/p/10671991.html

你可能感兴趣的文章
@property中 retain 详解
查看>>
java8 stream初试,map排序,list去重,统计重复元素个数,获取map的key集合和value集合...
查看>>
Python爬虫个人记录(四)利用Python在豆瓣上写一篇日记
查看>>
jdk8 Function
查看>>
第二次作业
查看>>
迷茫中的自己
查看>>
burp suite 的intruder 四种攻击方式
查看>>
机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
查看>>
自定义文本选中样式
查看>>
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
默认参数和命名关键字参数(1)
查看>>
模拟客户端浏览器-1
查看>>
正则校验
查看>>
十大PHP程序员必备工具
查看>>
使用excel2003中的solver解决最优化问题
查看>>
CDR案例:广告条幅banner设计
查看>>
【贪心】 【HDU 5821】 Ball
查看>>
.NET性能优化方面的总结(转)
查看>>
关于jmeter 加载jar文件的疑问
查看>>