Java 单例模式

饿汉式  懒汉式

SingletonOne.java:

package com.snape.singleton;

/**
 * 饿汉式:创建对象实例时直接初始化.
 * 用空间换时间
 */
public class SingletonOne {
    //1.创建类中私有构造
    private SingletonOne(){

    }

    //2.创建该类型的私有静态实例
    private static SingletonOne instance = new SingletonOne();

    //3.创建静态公有方法返回静态实例对象
    public static SingletonOne getInstance(){
        return instance;
    }
}
View Code

SingletonTwo.java:

package com.snape.singleton;

/**
 * 懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用getInstance()方法时才完成初始化操作。
 * 用时间换空间
 */
public class SingletonTwo {
    //1.创建私有构造方法
    private SingletonTwo(){

    }

    //2.创建静态的该类实例对象
    private static SingletonTwo instance = null;

    //3.创建开放的静态方法提供实例对象。
    public static SingletonTwo getInstance(){
        if(instance==null){
            instance = new SingletonTwo();
        }
        return instance;
    }
}
View Code

Test.java:

package com.snape.test;

import com.snape.singleton.SingletonOne;
import com.snape.singleton.SingletonTwo;

public class Test {
    public static void main(String[] args) {

        //饿汉式
        SingletonOne one = SingletonOne.getInstance();
        SingletonOne two = SingletonOne.getInstance();

        System.out.println(one);
        System.out.println(two);
        System.out.println(one==two);   //结果是true,表明 one 和 two 指向的是同一个对象。

        System.out.println("============================================");

        //懒汉式
        SingletonTwo one1 = SingletonTwo.getInstance();
        SingletonTwo two1 = SingletonTwo.getInstance();

        System.out.println(one1);
        System.out.println(two1);
        System.out.println(one1==two1);     //结果是true,表明 one 和 two 指向的是同一个对象。
    }
}
View Code

结果:

原文地址:https://www.cnblogs.com/CPU-Easy/p/12252486.html