Template模式

作者: oneWeekOneTopic | 来源:发表于2018-06-08 10:46 被阅读22次

解决问题

为避免重复代码及屏蔽复杂的算法逻辑,将相同的代码抽象出一个模板,差异化的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模式

    本文链接:https://www.haomeiwen.com/subject/fwbosftx.html