解决问题
为避免重复代码及屏蔽复杂的算法逻辑,将相同的代码抽象出一个模板,差异化的client端实现abstract方法。
应用场景
Template模式应该是我们最常用到的一种模式。在工作过程中,我们经?;嵊龅叫枰砸恍┬形蟹庾暗牟僮?,而template模式因为简单性则成为首先的一种方式。而我们经常使用的一些包,也有很多使用了Template模式,如JDBC。
模式图UML
AbstractClass 用来抽象逻辑和公共代码
SubClass1 用来实现差异化行为
示例
场景:为了提高响应速度和减轻后台服务的压力,前端请求的数据我们通?;嵯确梦驶捍妫绻捍娌淮嬖?,我们再请求数据库或者是远程RPC服务??墒腔捍嬗卸嘀謒emcache, 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();
}
}