Singleton Pattern
确保一个类只有一个实例,并提供一个全局访问点
模式一
package com.pattern.singleton; public class Temp { //临时类,用来对比单例模式 }
package com.pattern.singleton; public class Singleton { //私有化构造函数 private Singleton(){} //私有并静态实例 private static Singleton singleton; //提供公有的获取实例的方法 public static Singleton getInstances(){ if(singleton==null){ singleton=new Singleton(); } return singleton; } }
package com.pattern.singleton; public class Test { public static void main(String[] args) { Singleton s1=Singleton.getInstances(); Singleton s2=Singleton.getInstances(); System.out.println(s1==s2);//true Temp t1=new Temp(); Temp t2=new Temp(); System.out.println(t1==t2);//false } }
模式二
package com.pattern.singleton; /** * 这种单例模式是先创建一份实例,需要的话直接使用即可 */ public class Singleton2 { private Singleton2(){} private static Singleton2 singleton=new Singleton2(); public static Singleton2 getInstances(){ return singleton; } }
多线程情况下的单例模式
package com.pattern.singleton; public class ThreadSingleton { //私有化构造函数 private ThreadSingleton(){} //私有并静态实例 private static ThreadSingleton singleton; //提供公有,线程安全的获取实例的方法 public static synchronized ThreadSingleton getInstances(){ if(singleton==null){ singleton=new ThreadSingleton(); } return singleton; } }