`
badqiu
  • 浏览: 670417 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Holder模式

阅读更多

(本方法属于作者经验总结出该模式)

Holder模式的主要功能是将一些Bean可以转为静态方法调用.方便使用.

适用于一些系统只存在单例(singleton)并且 十分常用 的基础服务对象.这些基础服务如果每次使用spring注入,只会增加无谓的代码及一些不确定性.

示例如下:

BeanValidatorHolder.validate(bean) // HibernateValidator一般系统只有一个
CacheHolder.get("key") //如Memcached,应用系统也只有一个对象
ApplicationContextHolder.getBean("userInfoService");

与singleton相比特点

  • 一个Holder只能持有一个对象
  • Holder一般是持有接口,所以你可以方便的改变实现
  • 配合spring完成Holder初始化

 

示例1.CacheHolder?

用于持有Cache对象

1.1在spring中初始化

<bean class="cn.org.rapid_framework.util.holder.CacheHolder">
    <property name="cache" ref="memcacheCacheImpl"/>
</bean>

1.2使用 CacheHolder?使用

CacheHolder.add("key","cache_value","1h");
//do something

1.3实现

public class CacheHolder implements InitializingBean{
    private static Cache cache;
    public void afterPropertiesSet() throws Exception {
        if(cache == null) throw new IllegalStateException("not found 'cache' for CacheHolder ");
    }
       
    public void setCache(Cache c) {
        if(cache != null) throw new IllegalStateException("CacheHolder already holded 'cache'");
        cache = c;
    }
    public static Cache getCache(){
        return cache;
    }
//省略了其它N多cache静态方法
    public static void add(String key, Object value, String expiration) {
        cache.add(key, value, parseDuration(expiration));
    }
    public static void cleanHolder() {
        cache = null;
    }       
}

其它可以存在的Holder

 

holder 功能
BeanValidatorHolder 用于持有Hibernate Validator
SpringValidatorHolder 用于持有Spring Validator
ApplicationContextHolder 用于持有Spring ApplicationContext?
CacheHolder 用于持有Cache
MessagePublisherHodler 用于持有类似JMS消息中心的消息发送
MessageSourceHolder 持用MessageSource?,用于国际化
MailerHolder 用于邮件发送的Mailer
ConfigHolder 用于持有配置,需要动态刷新的参数使用,请查看文章保持类的无状态
SecurityManagerHolder 用于权限控制的SecurityManager

4
2
分享到:
评论
3 楼 zidafone 2013-11-02  
应用唯一的对象可以用holder持有,线程唯一的对象也可以用holder持有
private static ThreadLocal 啥啥啥的
2 楼 badqiu 2010-07-15  
本来就很多人混合使用 hibernate及jdbc

还有我这里写的是holder模式,你提与话题无关的问题, 
1 楼 JetMah 2010-07-15  
如果是我想Hibernate和JdbcTemplate混合使用的话,默认的DAO还是继承HibernateDaoSupport,然后再做一个SimpleJdbcTemplateHolder在DAO中调用,这样是不是比较完美?

相关推荐

    jiangzhuqingfeng#BestNote#单例模式的四种实现方式1

    枚举模式public enum Singleton3 {Holder模式public class Singleton4 {* 类级内部类,也就是静态的成员内部类

    android群雄传

    4.1.1 使用View Holder模式提高效率 66 4.1.2 设置项目间分隔线 68 4.1.3 隐藏List View的滚动条 68 4.1.4 取消List View的Item点击效果 68 4.1.5 设置List View需要显示在第几项 69 4.1.6 动态修改List View ...

    ChineduTest:电子游戏列表Android应用程序

    列表视图中的View Holder模式的优点包括: 一种。 防止查找也会影响性能的视图元素(CPU上的昂贵操作); 视图持有者,保留对视图的引用以加快listview滚动体验。 b。 防止随后的View膨胀,从而影响滚动时listview的...

    QY-OpenSource:开源学院,帮助Android新手学习使用开源项目

    简化list adapter中的View Holder模式 2014-11-29更新: 添加CircleProgress 各种形式的圆形进度条,有圆圈+数字风格的,有类似水位上升的。 添加CircularProgressButton 显示进度的按钮,可用于数据的提交,系统...

    多线程(20)单例设计模式1

    1. 饿汉式 2. 懒汉式 3.Holder方式 4.枚举方式

    Subdue:Subdue图挖掘器发现输入图中的高度压缩模式

    作者:华盛顿州立大学电气工程与计算机科学学院Larry Holder博士,电子邮件: 。 支持:本材料基于美国国家科学基金会在资助号1646640下的支持。 运行制服 命令行界面 Subdue使用以下命令行格式运行(需要Python 3...

    design-patterns:普通英语和简单代码的Java设计模式

    Initialization on demand holder Strategy Observer Built-in Self made Decorator Description Singleton 确保类只有一个实例,并提供一个全局访问点。 Strategy 策略模式定义了可以相互替换的一组算法,让算法的...

    文本模式「Text Mode」-crx插件

    通过激活文本模式来整理网页。所有页面均以文本形式加载(没有图像,动画或视频),因此内容更易于扫描和阅读 ★仅查看文本页面★图像,视频,Flash永不加载★无色页面更易于观看★减少页面加载★一键式轻松访问★...

    addlicense:该程序通过递归扫描目录模式来确保源代码文件具有版权许可证标头

    附加许可该程序通过递归扫描目录模式来确保源代码文件具有版权许可证标头。 它会修改所有的源文件,并避免将许可证标头添加到任何已有的文件中。安装go get -u github.com/google/addlicense用法addlicense [flags] ...

    graph-stream-generator:图流生成器(GSG)根据可以在不同流之间划分的子图模式生成多个图顶点和边流

    图流生成器图流生成器(GSG)根据可以在不同流之间划分的子图模式生成多个图顶点和边流。 作者:华盛顿州立大学电气工程与计算机科学学院的Larry Holder博士,电子邮件: 。 太平洋西北国家实验室的Sumit Purohit,...

    micro-gen:这将按照乔恩·卡尔霍恩(Jon Calhoun)的模式生成Golang微服务

    目录概述这是一个非常简单的微服务生成器,它创建以下文件夹和文件结构: migrations-用于放置数据库迁移的占位符文件夹pkg-用于大多数实际逻辑的文件夹db(如果启用了db)-微服务的数据库层的holder文件夹帮助程序...

    ImageView异步加载图片ImageLoaderSample.zip

     ImageLoader.getInstances().displayImage(list.get(position), holder.image, new ImageLoader.OnImageLoaderListener() {  @Override  public void onProgressImageLoader(ImageView imageView, int ...

    智能社区检测:回顾-研究论文

    这基本上是一种数据挖掘的形式,它处理的是图形而不是普通数据(Cook&Holder,2006年),它旨在发现重复的子图和在输入图中出现的有趣模式。 这项研究的重点是使用图挖掘技术进行社区检测。 目的是通过比较评估...

    Text Mode-crx插件

    通过激活文本模式来整理网页。 所有页面均以文本形式加载(没有图像,动画或视频),因此内容更易于扫描和阅读。 ★仅查看文本页面★图像,视频,Flash永不加载★无色页面更易于观看★减少页面负载★一键式轻松访问...

    PHP中使用虚代理实现延迟加载技术

    话说这货是从 Martin 大神的《企业应用架构模式》中学到的,辅助 PHP 动态语言的特性,可以比 Java 轻松很多的实现延迟加载——通过一个虚代理占位符。唯一的缺陷,是只能代理对象,不能代理内置基本类型。 我试水的...

    Android 通过ViewHolder优化适配器的实现方法(必看)

    Adapter类的定义: Adapter对象是AdapterView和底层数据见的桥梁。Adapter用于访问数据项,并且负责为数据项生成视图 AdapterView是一个抽象类,用于那些需要通过Adapter填充自身的视图,其常见子类是ListView。...

    xmljava系统源码-SpringInAction4:《SpringInAction4th》学习笔记

    holder”创建单例模式的理解,参考 Spring中单例的概念限于Spring上下文中,遵守约定 内部bean适用于setter注入和构造器注入,内部bean不能被复用 SpEL表达式 3. 高级装配 4 种自动装配 byName, byType, contructor, ...

    Android SimpleAdapter适配器使用详解

    HolderAdapter背景 Android的AdapterView用的比较多,ListView,GridView,Spinner等,原生的BaseAdapter对ViewHolder没有支持,每次都要,定义内部类,inflater根布局,对item内部view设置clicklistener并转发到...

    Wio Node 5分钟开发出你自己的 IOT 应用-电路方案

    5Battery Holder一个 Jst2.0 连接器,连接一个 3.7V 锂电池 6Analog/I2C1/D1Grove 端口,可以连接 Digital/I2C/Analog 类型的 Grove 模块 7UART/I2C0/D0Grove 端口,可以连接一个 UART/I2C/Digital 类型的 Grove ...

Global site tag (gtag.js) - Google Analytics