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();
    }
}

希望对大家有所帮助!!!

原文地址:https://www.cnblogs.com/zhuangwf/p/5150866.html