- 浏览: 119314 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
roychenyi:
<br>1<br>2<br> ...
pager-taglib 使用说明 -
roychenyi:
<br>换行<br>换行<br& ...
pager-taglib 使用说明 -
wangwenfei1985:
[flash=200,200][url][img][list] ...
pager-taglib 使用说明 -
时光后19:
,看到你这样真好,
FileNet调用webService配置 -
ysen:
大sql导入mysql
如果是SQL格式的。有的可能上100 ...
mysqldump备份详解
单例模式的实现方法有很多,饿汉和饱汉 ,Double-check Locking的模式, Registry of Singleton 模式
这里介绍下单例策略
在dom4j中就生成DocumentFactory工厂单例的时候就有单例策略的使用。
策略的介面如下:
public interface SingletonStrategy { /** * return a singleton instance of the class specified in setSingletonClass */ Object instance(); /** * reset the instance to a new instance for the implemented strategy */ void reset(); void setSingletonClassName(String singletonClassName); }
策略的两个实作:
1、
public class SimpleSingleton implements SingletonStrategy { //singletonClassName 需要被实例化成单例的类名,在DocumentFactory 中通过配置文件传值 private String singletonClassName = null; //singletonInstance 通过 reset() 返回单例的实例对象 private Object singletonInstance = null; public SimpleSingleton() { } //只是返回实例的对象方法 public Object instance() { return singletonInstance; } //used by setSingletonClassName() 产生不同的单例实例对象 public void reset() { if (singletonClassName != null) { Class clazz = null; try { clazz = Thread.currentThread().getContextClassLoader().loadClass( singletonClassName); singletonInstance = clazz.newInstance(); } catch (Exception ignore) { try { clazz = Class.forName(singletonClassName); singletonInstance = clazz.newInstance(); } catch (Exception ignore2) { } } } } //传进去singletonClassName 生成 一个实例 ,通过instance()取得单例 public void setSingletonClassName(String singletonClassName) { this.singletonClassName = singletonClassName; reset(); } }
2、每个线程一个单例实例对象,没这么用过不知道一般用在什么地方
public class PerThreadSingleton implements SingletonStrategy { private String singletonClassName = null; private ThreadLocal perThreadCache = new ThreadLocal(); public PerThreadSingleton() { } //重置每个线程的单例对象 public void reset() { perThreadCache = new ThreadLocal(); } // public Object instance() { Object singletonInstancePerThread = null; // use weak reference to prevent cyclic reference during GC WeakReference ref = (WeakReference) perThreadCache.get(); // singletonInstancePerThread=perThreadCache.get(); // if (singletonInstancePerThread==null) { if (ref == null || ref.get() == null) { Class clazz = null; try { clazz = Thread.currentThread().getContextClassLoader().loadClass( singletonClassName); singletonInstancePerThread = clazz.newInstance(); } catch (Exception ignore) { try { clazz = Class.forName(singletonClassName); singletonInstancePerThread = clazz.newInstance(); } catch (Exception ignore2) { } } perThreadCache.set(new WeakReference(singletonInstancePerThread)); } else { singletonInstancePerThread = ref.get(); } return singletonInstancePerThread; } public void setSingletonClassName(String singletonClassName) { this.singletonClassName = singletonClassName; } }
3、需要实现的单例类
public class DocumentFactory implements Serializable { //关联一个单例策略对象 private static SingletonStrategy singleton = null; protected transient QNameCache cache; /** Default namespace prefix -> URI mappings for XPath expressions to use */ private Map xpathNamespaceURIs; // used by getInstance() 创建单例策略对象 并将DocumentFactory 的classname set 给它 ,返回单例策略对象 private static SingletonStrategy createSingleton() { SingletonStrategy result = null; //通过配置文件得到DocumentFactory 的classname String documentFactoryClassName; try { documentFactoryClassName = System.getProperty("org.dom4j.factory", "org.dom4j.DocumentFactory"); } catch (Exception e) { documentFactoryClassName = "org.dom4j.DocumentFactory"; } try { String singletonClass = System.getProperty( "org.dom4j.DocumentFactory.singleton.strategy", "org.dom4j.util.SimpleSingleton"); Class clazz = Class.forName(singletonClass); result = (SingletonStrategy) clazz.newInstance(); } catch (Exception e) { result = new SimpleSingleton(); } result.setSingletonClassName(documentFactoryClassName); return result; } public DocumentFactory() { init(); } /** * <p> * Access to singleton implementation of DocumentFactory which is used if no * DocumentFactory is specified when building using the standard builders. * </p> * * @return the default singleon instance */ //DocumentFactory 创建自己的方法 线程安全的 public static synchronized DocumentFactory getInstance() { if (singleton == null) { singleton = createSingleton(); } return (DocumentFactory) singleton.instance(); }
发表评论
-
email 发送接口
2012-02-29 17:48 1488企业邮件发送有自己的发送平台,其它系统包括业务系统常常将发送邮 ... -
OOD原则
2010-03-09 16:51 1297单一职责原则(SRP) 就一个类而言,应该仅有一个引起它 ... -
GRASP(基于职责设计对象)
2010-03-09 16:41 1412GRASP(General Responsibility A ... -
女友的对话(中介者模式也叫调停者)
2010-01-02 20:40 861需要中介者对象作为通信控制平台 所操控的抽象对象 ... -
请假 加薪(职责链模式)
2009-12-30 20:50 1228学习笔记 职责链模式的结构 和装饰模式的结构是一样的。 ... -
如何换数据库(未使用任何框架)
2009-12-18 04:25 905因为之前使用的mysql 现在想转为Oracle实现 ... -
和女友的不愉快(访问者模式)
2009-12-13 13:59 989老鸟飞过哈 最近和女友很不和,特此用段模式写下自己的状 ... -
起床做饭(观察者模式)
2009-12-10 23:02 1042//通知者 public class Boy { //状 ... -
朋友做客(外观模式或者门面模式)
2009-12-10 01:12 823老鸟飞过 package facade; /* ... -
城市的生活成本(模板方法)
2009-12-09 16:50 838public abstract class Boy { ... -
女友多的好处2(工厂方法)
2009-12-08 01:01 1371(老鸟略过) 之前的一篇简单方法模式连接地址 http:/ ... -
带女友干活(代理模式)
2009-12-06 23:22 1275老鸟跳过请跳过, 最近无聊,贴一些自己过去学习设计模式 ... -
老公爱吃的菜(策略模式)
2009-12-06 00:09 941将策略的上下文的构造函数换用简单工厂模式的话就将业务对象封装起 ... -
陪她们依次去旅游(装饰模式)
2009-12-05 21:52 802//梦中情人 呵呵 public c ... -
女友多的好处 (简单工厂模式)
2009-12-05 21:47 1160java 的switch 语句的case 匹配为什么不能像de ... -
不同的年龄阶段喜欢不同的女孩 (状态模式)
2009-12-05 21:32 1118讨媳妇的男孩 public class Boy { ...
相关推荐
赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...
赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...
DOM4J jar包 所有的包 xml解析 dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1 导入直接使用
dom4j dom4j dom4j dom4j dom4j dom4j
JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源...
dom4j-1.6.1.zip与 dom4j-2.0.0-ALPHA-2.jar
maven dom4j 1.6.1安装包
dom4j-1.6.1.jar,Dom4j是一个Java的XML API接口,是jdom的进化版,dom4j基本用来读写xml文件,是一个十分优秀的JavaXML API接口
dom4j帮助文档 官方API All Classes Packages org.dom4j org.dom4j.bean org.dom4j.datatype org.dom4j.dom org.dom4j.dtd org.dom4j.io org.dom4j.jaxb org.dom4j.rule org.dom4j.rule.pattern org.dom...
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
这个压缩包是一个关于DOM4J的压缩包,里面包含了DOM4J的帮助文档,DOM4J的使用教程,以及DOM4J这个JAVA包。保证这个压缩包是网上面最全的有关DOM4J的文档。
dom4j.rar 包括dom4j API帮助文档和dom4j.jar包.dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点
org.dom4j.Node : Node为所有的dom4j中XML节点定义了多态行为 org.dom4j.NodeFilter:NodeFilter定义了在dom4j节点中产生的一个滤镜或谓词的行为 org.dom4j.ProcessingInstruction : ProcessingInstruction定义XML...
org.dom4j.bean An implementation of the dom4j API which allows JavaBeans to be used to store and retrieve attribute values from Element. org.dom4j.datatype An implementation of the dom4j API which ...
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
dom4j官方api文档,自己改为chm格式,方便大家开发学习.分享我们需要的东西!
内含下载自dom4j官网的 dom4j-1.6.1.jar dom4j-1.6.1.tar.gz dom4j-1.6.1.zip dom4j-2.0.2.jar dom4j-2.1.1.jar
dom4j 1.6.1 API,dom4j是一个优秀的xml解析工具包
Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包
dom4j 源码 dom4j 源码 dom4j 源码 dom4j 源码 dom4j 源码 dom4j 源码