Template模式

解决问题

为避免重复代码及屏蔽复杂的算法逻辑,将相同的代码抽象出一个模板,差异化的client端实现abstract方法。

应用场景

Template模式应该是我们最常用到的一种模式。在工作过程中,我们经常会遇到需要对一些行为进行封装的操作,而template模式因为简单性则成为首先的一种方式。而我们经常使用的一些包,也有很多使用了Template模式,如JDBC。

模式图UML

image

AbstractClass 用来抽象逻辑和公共代码

SubClass1 用来实现差异化行为

示例

场景:为了提高响应速度和减轻后台服务的压力,前端请求的数据我们通常会先访问缓存,如果缓存不存在,我们再请求数据库或者是远程RPC服务。可是缓存有多种memcache, redis等,远程服务有可能是数据库、http接口、thrift接口等。但我不希望为每一个种缓存和RPC都写一遍这个逻辑,那么我们就可以使用template模式。

AbstractClass

public abstract class DataService { 
    public Data getData() { 
        Data data = getDataFromCache(); 
        if (data == null) { 
            return this.getDataFromRpc(); 
        } 
        return null; 
    } 
     
    protected abstract Data getDataFromRpc(); 
     
    protected abstract  Data getDataFromCache(); 
     
}

subclass

public class XxDataService extends DataService { 
    @Override 
    protected Data getDataFromRpc() { 
        // 具体细节 
        return new Data(); 
    } 
 
    @Override 
    protected  Data getDataFromCache() { 
        // 具体细节 
        return new Data(); 
    } 
 
    public static void main(String[] args) { 
        new XxDataService().getData(); 
    } 
}

参考

https://en.wikipedia.org/wiki/Template_method_pattern

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

推荐阅读更多精彩内容

  • 设计模式之Template模式(模版模式)
    南乡清水阅读 645评论 0 3
  • 模板模式(template) 定义 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构...
    书魂X阅读 275评论 0 0
  • 阳光下都很“幸福” 夜里却抱着月亮哭 深夜的食物有剧毒 泉水出奇的苦 被迫与乞丐为伍 和枯木抢黄土 盗窃寒夜里的露...
    吐水的鲸鱼阅读 244评论 3 7
  • 爱是青春,是阳光映衬下发黄的书信,是那双曾经牵过的手。 爱是烈酒,是疯狂醉过的酣畅,是举杯消愁的烧喉。 爱是微风,...
    青衣书生V587阅读 177评论 0 0
  • 细风抚着流沙悄悄私语 胡杨黄的脊梁冲破云霄 碎石躺在铁轨旁晒着太阳 连落日都恋上了这大漠乡 蒙古族小伙对爱的执念 ...
    你好_娟子阅读 248评论 0 1