就是该类是全局唯一,只能实例化一次。后续的使用都是使用的同一个实例。 一般的该类的构造函数是private的,该类对外暴漏一个getInstance()方法,可以得到该类的实例。 例如:public class Single { private Single instance = null; private Single() { } public Single getInstance() { if (instance == null) { return new Single(); } return instance; } } 这只是其中的一个方法,还有其他的,可以看看java设计模式。
这样会更好些 public class Single { private static Single instance = null; int property = 0; private Single() { } public static Single getInstance() { if (instance == null) { return new Single(); } return instance; } }
需要使用到Single的时候 Single single = new Single(); 这样会出现出错误! 需要这样: Single single = Single.getInstance(); 单例字面意思就是只有一个实例对象! 好处就是封装了构造函数!
单例其实是一种设计上的模式,目的是为了保持只有一个实例对象。例:一般比如封装一个JDBC操作的工具类可能会用到。 以下的代码是一个示例,同时考虑了线程安全问题。仅供参考。public class Singleton { private static Singleton singleton = null; private Singleton() { } public static Singleton getInstance() { if (singleton == null) { //防止线程安全 synchronized (Singleton .class) { if (singleton == null) { singleton = new Singleton (); return singleton ; } } } return singleton; } }
public class Single { private static Single instance = null; int property = 0; private Single() { } public static Single getInstance() { if (instance == null) { instance=new Single(); return instance; } return instance; } }
一般的该类的构造函数是private的,该类对外暴漏一个getInstance()方法,可以得到该类的实例。
例如:public class Single
{
private Single instance = null; private Single()
{ } public Single getInstance()
{
if (instance == null)
{
return new Single();
}
return instance;
}
}
这只是其中的一个方法,还有其他的,可以看看java设计模式。
public class Single
{
private static Single instance = null;
int property = 0; private Single()
{ } public static Single getInstance()
{
if (instance == null)
{
return new Single();
}
return instance;
}
}
需要使用到Single的时候
Single single = new Single();
这样会出现出错误!
需要这样:
Single single = Single.getInstance();
单例字面意思就是只有一个实例对象!
好处就是封装了构造函数!
以下的代码是一个示例,同时考虑了线程安全问题。仅供参考。public class Singleton { private static Singleton singleton = null; private Singleton() {
} public static Singleton getInstance() {
if (singleton == null) {
//防止线程安全
synchronized (Singleton .class) {
if (singleton == null) {
singleton = new Singleton ();
return singleton ;
}
}
}
return singleton;
}
}
private static Single instance = null;
int property = 0; private Single() { } public static Single getInstance() {
if (instance == null) {
instance=new Single();
return instance;
}
return instance;
}
}
我的理解是,一个单例类的作用就相当于,一个对 static 属性的 集中操作,不管谁来操作,都是只针对一套,因为不能new 所以不会有新的出现,所谓的线程安全考虑,那全是扯淡,比如一个 单例类有 add()方法,别的类都去调用 add()会有问题吗? 除非,你把此类 所有的方法 都锁上,可是有这么做的吗?