java中的单例设计模式
如果希望某个类的对象只能存在一个,可以使用单例设计模式,单例设计分为俄汉式和懒汉式
先看一下俄汉式:
//单例俄汉式
class Single1{
private Single1(){};
private static Single1 single1 = new Single1();
public static Single1 getSingle1(){
return single1;
}
}
既然要保证Single1类的对象只存在一个,那就不让其他人来创建这个类的对象,要私有化构造函数:private Single1(){};
那别人不能创建这个类的对象了,怎么让别人取得这个类的对象呢,就自己提供一个方法getSingle1(),来返回这个对象,别人不能创建这个类的对象,
所以不能通过对象来调用这个方法,可以通过类名.getSingle1();来调用,所以这个方法要声明为static的,而这个方法要返回single1,所以single1
也要定义为static的:private static Single1 single1 = new Single1();
调用这个对象:
public class SingleDemo {
public static void main(String[] args) {
//调用某类自己提供的方法来产生某类的唯一对象
Single1 s1 = Single1.getSingle1();
}
}
另一种是懒汉式:
class Single{
private Single(){};
private static Single single = null;
//为了防止多线程操作,可以加锁,用synchronized 块或者在方法上加synchronized都行
public static /*synchronized*/ Single getSingle(){
if(null==single){//为空才进锁,提高性能
synchronized(Single.class){
if (null==single) {
single = new Single();
}
}
}
return single;
}
public void show(){
System.out.println("dasini");
}
}
调用:
public class SingleDemo {
public static void main(String[] args) {
//调用某类自己提供的方法来产生某类的唯一对象
Single s1 = Single.getSingle();
Single s2 = Single.getSingle();
System.out.println(s1); //同一个 p0115.Single@7f39ebdb
System.out.println(s2); //同一个 p0115.Single@7f39ebdb
System.out.println(s1==s2); //true说明是同一个对象,保证了对象的唯一性
Single.getSingle().show();
}
}
希望对大家有所帮助!!!