原文: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初始化
用于持有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 |
功能 |
BeanValidatorHolder |
用于持有Hibernate Validator |
SpringValidatorHolder |
用于持有Spring Validator |
ApplicationContextHolder |
用于持有Spring ApplicationContext? |
CacheHolder |
用于持有Cache |
MessagePublisherHodler |
用于持有类似JMS消息中心的消息发送 |
MessageSourceHolder |
持用MessageSource?,用于国际化 |
MailerHolder |
用于邮件发送的Mailer |
ConfigHolder |
用于持有配置,需要动态刷新的参数使用,请查看文章保持类的无状态 |
SecurityManagerHolder |
用于权限控制的SecurityManager |
分享到:
相关推荐
【Java之Holder技术详解】 Java中的Holder技术是一种用于在函数之间传递引用类型对象的方法,尤其在函数内部需要...在实际开发中,Holder模式常用于线程同步、回调函数以及需要跨函数边界传递和修改对象引用的场景。
在Android开发中,"面向Holder"是一种编程设计模式,它主要用在ListView、GridView等可滚动视图中,以提高数据绑定的效率和性能。这个应用实例源码着重展示了如何运用Holder来优化UI组件的数据加载过程,使得...
除了饱汉模式和饿汉模式以外,还有 Lazy initialization holder class 模式实现单态。 Lazy initialization holder class 模式是指使用类级的内部类来实现延迟加载,下面是代码示例: ```java public class ...
* Context Holder(上下文持有者) * Encapsulate Context(封装上下文) ## 三、上下文对象设计模式的意图 封装与用户或正在处理的请求相关的上下文(状态和行为),以将Java应用程序组件与环境的复杂性解耦。这种...
本示例“分离holder的低耦合度的adapter”着重探讨如何通过优化Adapter的设计来提高代码的可维护性和复用性。我们通常会遇到的问题是,Adapter与ViewHolder紧密耦合,导致代码难以维护,而分离ViewHolder可以有效地...
Holder 类型 利用 Java 类初始化的线程安全特性,通过静态内部类实现单例模式,既延迟加载又保证线程安全。例如: ```java public class Singleton { private Singleton() {} private static class Singleton...
枚举模式public enum Singleton3 {Holder模式public class Singleton4 {* 类级内部类,也就是静态的成员内部类
### 单例模式概念 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在一些大型应用系统中,通常希望某些类只能创建一个实例,例如,打印机、缓存管理器等。单例模式能够帮助...
开源软件的透明性、可定制性和社区驱动的发展模式,使得Comic Holder在不断迭代中不断完善,满足更多用户的个性化需求。 二、Comic Holder的功能解析 1. **漫画获取**:Comic Holder能够自动从网络上抓取用户订阅...
4. 静态内部类(Initialization-on-demand-holder idiom) 这种实现方式依赖于Java的类加载机制,即一个类的内部类在首次被使用时才进行加载和初始化。这种方式既保证了线程安全,又实现了懒加载。 5. 枚举(Enum ...
单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供全局访问点。在C++中,实现单例模式通常涉及到内存管理、线程安全以及生命周期控制等问题。下面将详细探讨C++中实现单例模式的三种方法,以及在多...
单例模式(Singleton)是设计模式中最简单也是最有争议的一个模式。它主要解决的问题是确保一个类仅有一个实例,并提供一个全局访问点。单例模式适用于那些需要全局访问的场景,比如线程池、缓存、配置对象等。单例...
传统的双重检查锁定(Double-Checked Locking)和静态内部类(Initialization-on-Demand Holder Class)都是在保证线程安全的同时,避免不必要的同步开销。 2. **生产者-消费者模式**: 该模式用于线程间的协作,...
5. **优化性能**:为了提高性能,可以考虑使用`View Holder`模式,减少布局查找的时间开销。此外,注意在不显示的条目上复用视图并停止动画,以避免不必要的资源消耗。 **三、代码示例** ```java public class ...
数据持有者对象是一种设计模式,用于将业务逻辑层和数据访问层分离,使得代码更加模块化和可维护。Data Holder .NET Framework通过这种方式,让开发者能够更专注于业务逻辑,而不是繁琐的数据操作。它通过关系映射...
本文将详细介绍四种常见的Java单例设计模式:饿汉式、懒汉式、Holder方式和枚举方式。 1. **饿汉式** 饿汉式单例在类加载时就完成了初始化,因此在多线程环境下是线程安全的。这种方式通过静态常量实例化对象,...
这种社区驱动的发展模式往往能够带来持续的创新和改进,确保软件能够适应不断变化的技术环境和用户需求。 在bmh-0.3.5版本中,可能包含了书签持有者的最新改进和修复。通常,软件的版本号反映了它的成熟度和稳定性...
2. 视图项(View Holder):这是适配器内部的一个类,用于持有并缓存视图组件,提高列表滚动时的性能。 3. 绑定逻辑:适配器负责将数据源中的数据与视图项进行绑定,确保每个列表项或Spinner选项正确显示数据。 ...
Lazy Initialization Holder Class(延迟初始化持有类) 另一种实现线程安全的单例模式的方法是使用静态内部类。这种方式利用了Java类加载机制的特性来保证初始化的线程安全性,同时又延迟了单例的初始化过程。 `...