又叫单一实例模式,宗旨在于确保某个类只有唯一的一个实例,并且为该类提供一个全局的访问点。
实现该模式的方法,主要有两种:单线程的和多线程的。
单线程:
代码如下:
public class SingletonPattern {
private static SingletonPattern single = null;
//防止直接产生一个的实例
private SingletonPattern() {}
public static SingletonPattern getInstance()
{
if(null == single)
{
single = new SingletonPattern();
}
return single;
}
}
外部在生成该类的对象时,由于single是静态对象,通过调用getInstance()来获取该类对象,如果single已经存在则直接返回,否则创建新对象。
这样,在单线程应用中,能够保证SingletonPattern类的对象时唯一的。
但是多线程中就不能保证。
多线程:
代码如下:
public class SingletonPattern {
private static SingletonPattern single = null;
private static object synclock = new object();
//防止直接产生一个的实例
private SingletonPattern() {}
public static SingletonPattern getInstance()
{
lock(synclock)
{
if(null == single)
{
single = new SingletonPattern();
}
}
return single;
}
}
在该方法中,多线程的情况也可以保证SingletonPattern对象的唯一性。
注意:在某些情况下,这么使用单一实例模式,不能达到单一实例的目的,比如跨服务器的情况等。这些需要在实际情况中去灵活运行。
另外,可以使用该模式,但是不要过度使用该模式。