单例模式

单例模式:为了保证此类只能有一个实例对象。

实现步骤如下:

  • 1.私有化构造器,使得外部不能调用此类的构造器
  • 2.在类的内部创建一个类的实例
  • 3.私有化对象,通过公共的static方法调用

Java实例

package demo.singleton;

public class Singleton {
    public static void main(String[] args) {
        Singleton1 sa = Singleton1.getInstance();
        Singleton1 sb = Singleton1.getInstance();
        System.out.println(sa==sb);

        Singleton2 s1 = Singleton2.getInstance();
        Singleton2 s2 = Singleton2.getInstance();
        System.out.println(s1==s2);
    }
}

/**
 * 单例模式
 * 1.私有化构造器,使得外部不能调用此类的构造器
 * 2.在类的内部创建一个类的实例
 * 3.私有化对象,通过公共的static方法调用
 */

/**
 * 单例模式(饿汉式)
 */
class Singleton1{
    private static Singleton1 instance = new Singleton1();

    private Singleton1(){
    }

    public static Singleton1 getInstance(){
        return instance;
    }
}

/**
 * 单例模式(懒汉式),存在线程安全问题(可用双重检验锁解决该问题)
 */
class Singleton2 {
    private volatile static Singleton2 instance = null;

    private Singleton2() {
    }
/*
    public static Singleton2 getInstance(){
        synchronized (Singleton2.class){
            if(instance==null){
                instance = new Singleton2();
            }
        }
        return instance;
    }
*/

    public static Singleton2 getInstance(){
        if(instance==null){
            synchronized (Singleton2.class){
                if(instance==null){
                    instance = new Singleton2();
                }
            }
        }
        return instance;
    }
}

你可能感兴趣的:(单例模式)