`
haohao-xuexi02
  • 浏览: 215665 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

转Holder模式

    博客分类:
  • java
 
阅读更多

原文:http://badqiu.iteye.com/blog/696983

 

 

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
分享到:
评论
2 楼 haohao-xuexi02 2011-07-13  
http://www.iteye.com/problems/67646?page=2
paulojian 写道
你的这个问题解决了吗?
http://www.iteye.com/problems/67646?page=2

还没有呢。
1 楼 paulojian 2011-07-12  
你的这个问题解决了吗?
http://www.iteye.com/problems/67646?page=2

相关推荐

    Java之Holder技术

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

    Android面向Holder应用实例源码

    在Android开发中,"面向Holder"是一种编程设计模式,它主要用在ListView、GridView等可滚动视图中,以提高数据绑定的效率和性能。这个应用实例源码着重展示了如何运用Holder来优化UI组件的数据加载过程,使得...

    22种开发模式

    除了饱汉模式和饿汉模式以外,还有 Lazy initialization holder class 模式实现单态。 Lazy initialization holder class 模式是指使用类级的内部类来实现延迟加载,下面是代码示例: ```java public class ...

    【Java设计模式-源码】上下文对象模式:简化上下文数据的访问

    * Context Holder(上下文持有者) * Encapsulate Context(封装上下文) ## 三、上下文对象设计模式的意图 封装与用户或正在处理的请求相关的上下文(状态和行为),以将Java应用程序组件与环境的复杂性解耦。这种...

    分离holder的低耦合度的adapter

    本示例“分离holder的低耦合度的adapter”着重探讨如何通过优化Adapter的设计来提高代码的可维护性和复用性。我们通常会遇到的问题是,Adapter与ViewHolder紧密耦合,导致代码难以维护,而分离ViewHolder可以有效地...

    单例设计模式.pdf

    Holder 类型 利用 Java 类初始化的线程安全特性,通过静态内部类实现单例模式,既延迟加载又保证线程安全。例如: ```java public class Singleton { private Singleton() {} private static class Singleton...

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

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

    单例模式概念与实例(简单实例)

    ### 单例模式概念 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在一些大型应用系统中,通常希望某些类只能创建一个实例,例如,打印机、缓存管理器等。单例模式能够帮助...

    Comic Holder-开源

    开源软件的透明性、可定制性和社区驱动的发展模式,使得Comic Holder在不断迭代中不断完善,满足更多用户的个性化需求。 二、Comic Holder的功能解析 1. **漫画获取**:Comic Holder能够自动从网络上抓取用户订阅...

    C++实现的单例模式代码

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供全局访问点。在C++中,实现单例模式通常涉及到内存管理、线程安全以及生命周期控制等问题。下面将详细探讨C++中实现单例模式的三种方法,以及在多...

    01 设计模式之单例模式.pdf

    4. 静态内部类(Initialization-on-demand-holder idiom) 这种实现方式依赖于Java的类加载机制,即一个类的内部类在首次被使用时才进行加载和初始化。这种方式既保证了线程安全,又实现了懒加载。 5. 枚举(Enum ...

    单例模式(Singleton)的6种实现

    单例模式(Singleton)是设计模式中最简单也是最有争议的一个模式。它主要解决的问题是确保一个类仅有一个实例,并提供一个全局访问点。单例模式适用于那些需要全局访问的场景,比如线程池、缓存、配置对象等。单例...

    java多线程设计模式

    传统的双重检查锁定(Double-Checked Locking)和静态内部类(Initialization-on-Demand Holder Class)都是在保证线程安全的同时,避免不必要的同步开销。 2. **生产者-消费者模式**: 该模式用于线程间的协作,...

    android,Gallery,页面翻转

    5. **优化性能**:为了提高性能,可以考虑使用`View Holder`模式,减少布局查找的时间开销。此外,注意在不显示的条目上复用视图并停止动画,以避免不必要的资源消耗。 **三、代码示例** ```java public class ...

    Data Holder .net Framework-开源

    数据持有者对象是一种设计模式,用于将业务逻辑层和数据访问层分离,使得代码更加模块化和可维护。Data Holder .NET Framework通过这种方式,让开发者能够更专注于业务逻辑,而不是繁琐的数据操作。它通过关系映射...

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

    本文将详细介绍四种常见的Java单例设计模式:饿汉式、懒汉式、Holder方式和枚举方式。 1. **饿汉式** 饿汉式单例在类加载时就完成了初始化,因此在多线程环境下是线程安全的。这种方式通过静态常量实例化对象,...

    Bookmark Holder-开源

    这种社区驱动的发展模式往往能够带来持续的创新和改进,确保软件能够适应不断变化的技术环境和用户需求。 在bmh-0.3.5版本中,可能包含了书签持有者的最新改进和修复。通常,软件的版本号反映了它的成熟度和稳定性...

    020_UI_常用组件之 Spinner与适配器模式

    2. 视图项(View Holder):这是适配器内部的一个类,用于持有并缓存视图组件,提高列表滚动时的性能。 3. 绑定逻辑:适配器负责将数据源中的数据与视图项进行绑定,确保每个列表项或Spinner选项正确显示数据。 ...

    JAVA中单例模式的几种实现方式.doc

    Lazy Initialization Holder Class(延迟初始化持有类) 另一种实现线程安全的单例模式的方法是使用静态内部类。这种方式利用了Java类加载机制的特性来保证初始化的线程安全性,同时又延迟了单例的初始化过程。 `...

Global site tag (gtag.js) - Google Analytics