原来这就是Java中的模板设计模式,太easy太实用了!

2019 年 11 月 19 日 互联网架构师


作者:Mazin

来源:my.oschina.net/u/3441184/blog/916670
顾名思义,模板设计模式就是将许多公用的常用的代码封装成一个模板,我们只需要实现不同的业务需求的代码,然后和模板组合在一起,那么就得到完整的逻辑。
在我们的日常开发中,常用的模板模式有两种实现方式:继承和接口回调,下面我们就分别使用这两种方式来实现模板设计模式。
假设一个场景,有一段代码如下所示:
public void doSomething(){
    固定代码片段
        
    业务相关代码

    固定代码片段
}

如果这段代码在很多地方要使用,并且固定代码比较多,业务相关代码比较少,且比较集中,那么如果我们每次实现一个业务都写下一个完整的流程,那么就会有很多重复代码,使用模板设计模式可以很好的解决这一问题。

是用继承的方式实现:创建一个模板类,将模板代码封装:

  
  
    
public abstract class Templet {

  public void doTemplet(){
    System.out.println("固定代码片段");
    
    //业务逻辑代码
    doSomething();
    
    System.out.println("固定代码片段");
  }
  
  public abstract void doSomething();
}

我们需要使用模板的类只需要继承这个模板类,并实现那个抽象方法,那么在调用doTemplet的时候,调用的业务逻辑代码自然就是我们那个子类中的实现了,这样就能实现不同的逻辑使用同一段代码了。

使用回调的方式实现,首先我们定义一个较为通用的接口:

public interface Callback<V,T{
  public V doSomething(T t);
}
我们要使用模板的测试类:
  
  
    
public class Test {
  public static void main(String[] args) {
    useTemplet("业务逻辑",new Callback<StringString>() {
      @Override
      public String doSomething(String t) {
        return t;
      }
    });
  }
  
  public static void useTemplet(String str,Callback<String,String> callback){
    System.out.println("固定代码");
    
    String result = callback.doSomething(str);
        System.out.println(result );
    
    System.out.println("固定代码");
  }
}

这样如果还有其他的代码需要复用模板,那么直接调用useTemplet就可以了。

模板设计模式在框架的设计中使用比较多,例如springmvc的view就是一个典型的模板设计模式。

推荐阅读 ↓↓↓

1.不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

2.如何才能成为优秀的架构师?

3.从零开始搭建创业公司后台技术栈

4.程序员一般可以从什么平台接私活?

5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6.阿里规定超过三张表禁止join,这是为什么?

7.滴滴业务中台构建实践,首次曝光

8.15张图看懂瞎忙和高效的区别!

一个人学习、工作很迷茫?


点击「阅读原文」加入我们的小圈子!



登录查看更多
2

相关内容

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
174+阅读 · 2020年1月1日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
已删除
将门创投
18+阅读 · 2019年2月18日
占坑!利用 JenKins 持续集成 iOS 项目时遇到的问题
Python NLP入门教程
七月在线实验室
7+阅读 · 2018年6月5日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
码农日常工具推荐
架构文摘
4+阅读 · 2017年9月26日
代码这样写不止于优雅(Python版)
数说工作室
4+阅读 · 2017年7月17日
A survey on deep hashing for image retrieval
Arxiv
14+阅读 · 2020年6月10日
Knowledge Based Machine Reading Comprehension
Arxiv
4+阅读 · 2018年9月12日
VIP会员
相关VIP内容
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
174+阅读 · 2020年1月1日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
相关资讯
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
已删除
将门创投
18+阅读 · 2019年2月18日
占坑!利用 JenKins 持续集成 iOS 项目时遇到的问题
Python NLP入门教程
七月在线实验室
7+阅读 · 2018年6月5日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
码农日常工具推荐
架构文摘
4+阅读 · 2017年9月26日
代码这样写不止于优雅(Python版)
数说工作室
4+阅读 · 2017年7月17日
Top
微信扫码咨询专知VIP会员