可更新的注册式的单实例模式
?????? 最近,遇到这样一个应用。在系统中需要大量的配置信息,为了不每次都找数据库或者配置文件。需要一个生命周期和App一样的容器(=静态变量),但是在配置信息被修改时还需要去更新这个容器。
?
????? 首先选用的是单实例模式。单实例模式中又可分为恶汉,懒汉,以及一种基于饿汉型的注册型。
????? 个人感觉懒汉型单例模式没什么,而饿汉型的更能体现java特点。然注册行的可扩展性较强,个人感觉有点像
?????? 一个实例工厂.下面来一一列举。
?
恶汉:
?
public class ConfigImpl extends ConfigClass { private List properties = null; /** * @return the properties */ public List getProperties() { return properties; } private ConfigImpl() { initalProperties(); } public static ConfigImpl getInstance() { return (ConfigImpl) ConfigClass.getInstance("singleConfig.ok.ConfigImpl"); } /** * * @author xiaofeng.bai<BR> * <B>Time</B> : 2008-12-11 下午01:59:24 */ public void updateProperties() { ConfigImpl con = new ConfigImpl(); properties = con.getProperties(); } /** * @author xiaofeng.bai<BR> * <B>Time</B> : 2008-12-11 下午01:56:53 */ private void initalProperties() { // 初始化配置信息 }}?
呵呵终于完成了,但是现在发现一个问题很晕。我在ConfigImpl中的updateProperties()中有创建了一个ConfigImpl的实例,这样能完成我对properties的更新吗?
单实例顾名思义在一个JVM中只有一个实例,这样是否可行呢?
?
?
1 楼 new20080601 2009-01-07 和java与模式 那里很像呀。。。。只是
public void updateProperties() {
Config con = new (ConfigImpl) ConfigClass.getInstance("singleConfig.ok.ConfigImpl"); //改成这样呢? 随便说说的
properties = con.getProperties();
}
/**
* @author xiaofeng.bai<BR>
* <B>Time</B> : 2008-12-11 下午01:56:53
*/
private void initalProperties() {
// 初始化配置信息
}
这个没有,(*^__^*) 嘻嘻……,新手报道 2 楼 new20080601 2009-01-07 public void updateProperties() {
}
这个方法不要呀也可以
在测试,类里用
Config con = new (ConfigImpl) ConfigClass.getInstance("singleConfig.ok.ConfigImpl");
con .getProperties()
应该就确保一个了吧 3 楼 chian_xxp 2009-04-10 能否请楼主简要介绍下RegSingleton 类中static private的用意。实在看不明白,这样的修饰有什么特别的用意吗?
在jdk source中,也发现File.java中也出现这样的用法。
4 楼 fmjasper 2009-04-11 你确定这个程序能通过? 不会跑出access exception, 注册式的singleton, 子类的constructor必须是public