单例模式(懒汉式和饿汉式)

package com.jason.singleton1;

/**
 * @author jason
 * @Description:单例模式 懒汉式只有初始化的时候才会初始化对象
 * @date 2018/2/2
 */
public class Singleton {

    //1.私有化构造器
    private Singleton(){

    }
    //2.提供唯一的对象
    private static  Singleton singleton = null;

    //3.对外提供静态方法
    public static  Singleton getSingleton(){
        if(singleton == null){
            //如果为空对象,new一个给sinleton
            //但是存在线程不安全问题,加上同步代码块
            synchronized (Singleton.class) {
                singleton = new Singleton();
            }
        }
        return singleton;
    }
}
package com.jason.singleton1;

/**
 * @author jason
 * @Description: 饿汉式 在加载到内存中的时候就初始化对象
 * @date 2018/2/2
 */
public class Singleton1 {
    //1:提供私有化构造器
    private Singleton1(){

    }
    //2.初始化的时候提供该静态对象
    private static  Singleton1 singleton1 = new Singleton1();

    //3.向外提供公共方法对外访问
    public static Singleton1 getSingleton1(){
        return singleton1;
    }
}

package com.jason.singleton1;

/**
 * @author jason
 * @Description: 测试单例模式
 * @date 2018/2/2
 */
public class Test {

    public static void main(String[] args) {
        //测试饿汉式
        Singleton1 s1 = Singleton1.getSingleton1();
        Singleton1 s2 = Singleton1.getSingleton1();

        //如果返回true,则证明是对象是同一个对象
        System.out.println(s1 == s2);


        //测试懒汉式
        Singleton singleton = Singleton.getSingleton();
        Singleton singleton1 = Singleton.getSingleton();

        //如果返回true,则证明对象是同一个对象
        System.out.println(singleton == singleton1);
    }
}

你可能感兴趣的:(设计模式)