单例模式
package com.bfh.timeline.Singleton; /** * Created by bfh on 2015/11/15. */ public class Singleton01 { /** * @desc 懒汉load */ /** *@desc 构造方法 */ private Singleton01(){ }; /** *@desc 静态成员 */ private static Singleton01 singleton01 = null; /** * @desc 静态方法 * @return */ public static Singleton01 getInstance() { if (singleton01 == null) { singleton01 = new Singleton01(); } return singleton01; } /** * @desc 同步 */ public synchronized static Singleton01 getInstance_synch() { if (singleton01 == null) { singleton01 = new Singleton01(); } return singleton01; } /** *@desc 双锁制 * 注意锁的一致性,只有访问方法用到的锁是一个才符合 */ public synchronized static Singleton01 getInstance_doubleCheck() { if (singleton01 == null) { synchronized (Singleton01.class){ singleton01 = new Singleton01(); } } return singleton01; } }
package com.bfh.timeline.Singleton; /** * Created by bfh on 2015/11/15. */ public class Singleton02 { /** * @desc 静态内部类 */ private static class LazyHolder { private static final Singleton02 INSTANCE = new Singleton02(); } private Singleton02 (){} public static final Singleton02 getInstance() { return LazyHolder.INSTANCE; } }
package com.bfh.timeline.Singleton; /** * Created by bfh on 2015/11/15. */ public class Singleton03 { /** * @desc 饿汉式单例 */ private Singleton03() {} private static final Singleton03 single = new Singleton03(); //静态工厂方法 public static Singleton03 getInstance() { return single; } }
package com.bfh.timeline.Singleton; import java.util.HashMap; import java.util.Map; /** * Created by bfh on 2015/11/15. */ public class Singleton04 { private static Map<String,Singleton04> map = new HashMap<String,Singleton04>(); static{ Singleton04 single = new Singleton04(); map.put(single.getClass().getName(), single); } //保护的默认构造子 protected Singleton04(){} //静态工厂方法,返还此类惟一的实例 public static Singleton04 getInstance(String name) { if(name == null) { name = Singleton04.class.getName(); System.out.println("name == null"+"--->name="+name); } if(map.get(name) == null) { try { map.put(name, (Singleton04) Class.forName(name).newInstance()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } return map.get(name); } //一个示意性的商业方法 public String about() { return "Hello, I am RegSingleton."; } public static void main(String[] args) { Singleton04 single4 = Singleton04.getInstance(null); System.out.println(single4.about()); Singleton04 single4_1 = Singleton04.getInstance(null); System.out.println(single4_1.about()); } }
朱雀桥边野草花,乌衣巷口夕阳斜。
旧时王谢堂前燕,飞入寻常百姓家。
浙公网安备 33010602011771号