饿汉式 懒汉式
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; } }
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; } }
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 指向的是同一个对象。 } }
结果: