写这个博客主要是为了工作学习经验的记录笔记。
最近负责公司的分布式缓存设计开发,刚好用到设计模式,模板方法,代码有所简化,与实际项目代码细节不一样但是思想一样。
下面的CacheAbleDAO就应用到了模板方法search,负责处理数据库取数据还是缓存取存数据的部分逻辑,doSearch方法由各个业务DAO的子类实现自己的查询,Criteria接口主要是封装查询条件和cache相关参数比如cache key,isCacheable是否能够cache。具体代码如下
public abstract class CacheAbleDAO<E> {
private Cache cache;
public abstract List<E>doSearch(Criteria criteria);
public final List<E>search(Criteria criteria){
List<E> result=null;
//to determined whether the result have ability to put cache,if not, then go to DB directly
if(!criteria.isCacheAble())
result=doSearch(criteria);
else{
//to retrieve data from cache
result=getFromCache(criteria);
//to determined whether data is existed in distributed Cache, if not,then retrieve data from DB and store to distributed Cache
if(result==null){
result=searchAndCache(criteria);
}
}
return result;
}
private List<E> searchAndCache(Criteria criteria){
//firstly,to retrieve data set from DB
List<E> result =doSearch(criteria);
//secondly, put the data to distributed cache
if(criteria.isCacheAble())
this.doCache(criteria,result);
//finally, return data
return result;
}
private void doCache(Criteria criteria,List result){
cache.put(criteria.getRegion(),criteria.getKey(),result);
}
private List<E> getFromCache(Criteria criteria){
return (List<E>)cache.get(criteria.getRegion(), criteria.getKey());
}
}
业务子类DAO如下,其中数据库查询省略,
public class XXXXXDAO<E> extends CacheAbleDAO<E>{
@Override
public List<E> doSearch(Criteria criteria) {
// do some DB query
return null;
}
}
总结,为了不占用子类的继承extend,其实更好的方法是可以将模板方法改造为回调的方式,具体实现可以参看HibernateCallBack相关类源码实现.
分享到:
相关推荐
模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...
模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...
### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...
设计模式是一种在软件设计中被广泛应用的通用解决方案模板,它总结了在特定上下文中解决常见问题的最佳实践。设计模式的概念起源于建筑行业,后来被引入到计算机科学,特别是在面向对象编程领域,成为提升代码可复用...
C++源代码文件可以帮助你更好地理解如何在实际项目中应用这些模式,通过阅读和分析代码,你可以学习如何在C++中实现这些设计模式,并将它们融入到自己的编程实践中。 总而言之,设计模式是软件开发中的宝贵财富,...
**模板模式**是一种行为设计模式,它允许在父类中定义算法的骨架,而将一些具体步骤的实现延迟到子类中。这种模式主要用于在代码中定义一套算法的框架,并允许子类在不改变算法整体结构的情况下重定义特定的步骤。 ...
模板方法模式是面向对象设计模式的一种,它在行为模式中占据重要地位。此模式的核心思想是定义一个操作的框架,允许子类在这个框架内自定义具体的行为。这为代码复用和实现相同逻辑的不同实现提供了方便,同时也遵循...
通过这个"通俗易懂版"的学习资源,你将能够深入理解每种设计模式的原理,掌握如何在实际项目中应用它们,提升代码的可维护性和复用性。阅读《设计模式_20090916.pdf》文档,结合具体的代码示例,相信你将能够更好地...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板。这个压缩包文件名为"26种设计模式",其中可能详细介绍了软件开发中的26个核心设计模式。这些模式是经过时间检验、被广泛接受并反复使用...
模板模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。此模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤...
设计模式是解决特定问题的一种标准方法,它不仅仅是一种代码技巧或模板,更是一种思考问题的方式。在面向对象编程中,设计模式提供了可复用的设计方案,帮助开发者减少重复工作,提高代码质量和维护性。此外,重构...
模板方法模式是设计模式中行为模式的一种,它在软件工程中扮演着重要的角色,尤其是在创建算法框架时。这种模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现,使得子类可以不改变算法的结构...
通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的设计模式,以及如何优雅地在Java代码中实现这些模式。这将有助于提升开发者的编程技巧,...
设计模式是软件工程中的一种最佳实践,它们是解决常见问题的模板,可以提高代码的可读性和可维护性。在自定义控件中,设计模式的应用至关重要。例如: 1. **组合模式**:组合模式允许我们将多个小的组件组合成一个...
- **应用模式**:将选中的模式应用于实际项目中,实现问题的解决。 #### 六、案例研究:文档编辑器的设计 **案例研究:设计文档编辑器** 本章节通过一个具体的案例——文档编辑器的设计,展示了如何运用设计模式来...
模板模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。这个模式定义了算法的骨架,并允许子类在不改变结构的情况下重...极客学院的这门课程旨在帮助学员掌握模板模式的精髓,以便在实际项目中灵活应用。
7. 在实际项目开发中,设计模式和设计原则的应用可以帮助开发团队提高开发效率,降低维护成本,减少代码冗余,增强系统的稳定性和可扩展性。设计模式不仅应用于Java语言,还广泛应用于其他面向对象编程语言中,如C++...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
在软件开发领域,设计模式是经过时间和实践验证的解决方案模板,用于解决常见编程问题。C#作为.NET框架的主要编程语言,拥有丰富的设计模式支持。这个压缩包中的代码示例为学习和理解C#设计模式提供了宝贵的资源。...
"设计模式复习题.doc" 以下是根据给定文件生成的相关...以上是根据给定文件生成的相关知识点,涵盖了设计模式的种类、基本要素、应用场景、设计原则、实现方式、优点、应用领域、设计模式、常见问题和学习方法等方面。