当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

Holder模式

发表于: 2010-06-22   作者:badqiu   来源:转载   浏览次数:
摘要: (本方法属于作者经验总结出该模式) Holder模式的主要功能是将一些Bean可以转为静态方法调用.方便使用. 适用于一些系统只存在单例(singleton)并且 十分常用 的基础服务对象.这些基础服务如果每次使用spring注入,只会增加无谓的代码及一些不确定性. 示例如下: BeanValidatorHolder.validate(bean) // Hibe

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

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

Holder模式

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
ListView不同的Holder的应用 ListView 需要解析的Gson格式 对于存在上面情况的处理方式 第一时间想
看这个代码: String str2; do{ String str1 = new String("abc"); str2 = new String("cde"); }while
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象
工厂模式有两种类型:工厂方法模式和抽象工厂模式 工厂方法模式定义:定义了一个创建对象的接口(这
命令模式定义:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模
外观模式定义:提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系
装饰模式(Decorater) 动态的给一个对象添加一些额外的职责。 就增加功能来说,装饰模式比生成子类更
代理模式(Proxy) 关于代理,ITer做常见的应该就是用来翻鸡爱抚大不留的代理了。 生活中也有很多代理
策略模式:定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号