设计模式 之 “单例模式[Singleton Pattern]”

单例模式[Singleton Pattern]类图
[img]http://dl.iteye.com/upload/attachment/266520/46c5fc30-682e-33a7-95b6-21c76714a3d6.png[/img]

这里我们来看下这个单例模式注册器如何工作的:

package m.utils;
import java.util.HashMap;
import org.apache.log4j.Logger;

/**
* 单例模式注册器
*
*/
public class SingletonRegistry {
public static SingletonRegistry REGISTRY = new SingletonRegistry();

private static HashMap map = new HashMap();
private static Logger logger = Logger.getRootLogger();

protected SingletonRegistry() {
// Exists to defeat instantiation
}
public static synchronized Object getInstance(String classname) {
Object singleton = map.get(classname);

if(singleton != null) {
return singleton;
}
try {
singleton = Class.forName(classname).newInstance();
logger.info("created singleton: " + singleton);
}
catch(ClassNotFoundException cnf) {
logger.fatal("Couldn't find class " + classname);
}
catch(InstantiationException ie) {
logger.fatal("Couldn't instantiate an object of type " +
classname);
}
catch(IllegalAccessException ia) {
logger.fatal("Couldn't access class " + classname);
}
map.put(classname, singleton);
return singleton;
}
}


光有代码是看不出如何调用的,我们需要看看如何调用这个注册器,例如:

public class Singleton {
protected Singleton() {
// Exists only to thwart instantiation.
}
public static Singleton getInstance() {
return (Singleton)SingletonRegistry.REGISTRY.getInstance("m.pattern.Singleton");
}
}

这里将需要实现单例模式的类的构造方法使用protected来修饰,通过getInstance方法来获得这个单例的实例。

[url=http://dl.iteye.com/topics/download/8e892505-90d3-3e0f-9333-e11a78bf9c16]单例模式[Singleton Pattern] example code[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值