`
badqiu
  • 浏览: 674482 次
  • 性别: 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中调用,这样是不是比较完美?

相关推荐

    Java之Holder技术

    【Java之Holder技术详解】 Java中的Holder技术是一种用于在函数之间传递引用类型对象的方法,尤其在函数内部需要...在实际开发中,Holder模式常用于线程同步、回调函数以及需要跨函数边界传递和修改对象引用的场景。

    MyAdapterDemo

    Adapter是Android中的一个接口,通常与View Holder模式结合使用,以提高性能。在MyAdapterDemo中,我们可能看到它继承了BaseAdapter,这是一个基础的抽象类,已经实现了大部分Adapter的方法,如getCount()、getItem...

    ListViewDemo缓存

    1. View Holder模式:这是ListView性能优化的关键。View Holder是一个内部类,用于存储每个列表项视图的子视图对象。通过复用ViewHolder,避免了每次绑定数据时寻找子视图的操作,大大提高了滚动时的性能。 2. ...

    ListViewTest.zip

    4. **View Holder模式**:为提高ListView的滚动性能,开发者可能会使用View Holder模式。这是一个简单的缓存机制,保存了列表项视图中的复杂控件引用,避免每次滚动时重复查找。 5. **ListView性能优化**: - ** ...

    Android 具有伸缩效果的ListView源码.zip源码资源下载

    - 为了提高ListView的滚动性能,通常会使用View Holder模式。它缓存了ListView项中的每个View,避免频繁的findViewById操作,提高了性能。 3. **动画效果**: - 这个伸缩效果可能是通过Android的Animation类或者...

    android之listview和checkbox

    1.3 View Holder模式:为了提高ListView的性能,开发者通常会采用View Holder模式。该模式缓存了列表项中的视图,避免了频繁的findViewById()操作,提高渲染速度。 二、CheckBox集成 2.1 单选与多选:在ListView中...

    ListView三级联动效果

    3. **View Holder模式**:为了提高ListView的滚动性能,通常会使用View Holder模式来缓存视图对象。在`getView()`方法中,首先检查convertView是否为空,如果不为空则复用,否则创建新的视图并绑定数据。 4. **数据...

    Android应用源码gallery重叠特效源码+注释.zip

    7. **性能优化**:由于Gallery会一次性加载多个视图,所以源码可能涉及到性能优化,比如使用View Holder模式减少视图的创建和复用,或者使用异步加载图片技术避免UI阻塞。 8. **兼容性问题**:由于Gallery是旧组件...

    Android高效编程指南.ppt

    - 使用View Holder模式提高列表滚动流畅度。 4. **线程与并发** - 正确使用Handler、Looper和Message,避免主线程阻塞。 - 学习和使用AsyncTask、IntentService或Worker Thread处理后台任务。 - 了解Android的...

    RecyclerView 和 ListView 使用对比分析

    RecyclerView同样采用了View Holder模式,但它的优化更为深入,支持更复杂的布局管理器,如LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager,使得布局方式更加多样。此外,RecyclerView提供了...

    ListView滚动气泡提示android源码

    2. **View Holder模式**:为了提高ListView的滚动性能,通常会使用View Holder模式来缓存视图,避免频繁地创建和销毁视图对象。 3. **事件监听**:需要监听ListView的滚动事件,这通常通过`OnScrollListener`接口...

    仿豌豆荚Listview的应用描述

    2. **View Holder模式**:为提高ListView的滚动性能,我们通常使用View Holder模式。这可以避免在滚动时频繁地创建和复用视图,提高UI渲染速度。 3. **Expandable TextView**:核心部分是实现一个可展开和折叠的...

    Android应用源码之横向ListView的完整实现(包含基于横向listview做的一个小相册demo).zip

    为了优化性能,ListView和RecyclerView都采用了View Holder模式。通过缓存已经创建的视图,避免了频繁的视图创建和销毁。在自定义Adapter中,我们需要实现ViewHolder类并使用它来存储和重用列表项的视图。 5. **...

    Test2 listView内嵌套listview

    2. View Holder模式:为了提高性能,我们需要使用View Holder模式来缓存经常使用的视图组件,减少findViewById()的调用次数。 3. 数据结构:设计合适的数据模型以表示层级关系。可能是一个列表中包含其他列表的对象...

    安卓Andriod源码——ListView&时间轴.zip

    View Holder模式则能优化ListView中视图的重用,提高滚动性能。 时间轴(Timeline)的实现则更为复杂,通常需要自定义布局(Layout)和绘制(Draw)过程。在Android中,可以使用LinearLayout或RelativeLayout作为...

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

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

    安卓Android源码——医院介绍电子书籍源码.zip

    视图holder模式则可以提高滚动性能,避免频繁的findViewById操作。 6. **Intent机制**:Android应用内部的跳转和通信主要依赖Intent。在这个源码中,开发者可能用Intent来启动新的活动或者传递数据。 7. **XML布局...

    安卓自定义ListView中含有EditText控件

    ListView的工作原理是基于视图复用,也就是View Holder模式。当用户滚动ListView时,已超出屏幕范围的视图会被回收并重新用来显示即将进入视野的新数据项。因此,如果EditText保存了之前某个位置的数据,当这个...

    安卓Android源码——ListViewTweenSample.rar

    4. **View Holder模式**: - 为了提高ListView的性能,源码可能采用了ViewHolder设计模式。ViewHolder缓存了列表项布局中的子视图引用,避免了频繁的findViewById操作,提高了列表滚动时的流畅性。 5. **动画库**...

    listviewCheckboxDemo

    2. **View Holder模式**: 为了提高ListView的滚动性能和用户体验,通常会采用ViewHolder设计模式。ViewHolder类持有列表项中的各个组件引用,避免了每次绑定数据时都进行 findViewById() 操作,从而减少不必要的...

Global site tag (gtag.js) - Google Analytics