Java设计模式(学习整理)---单例模式
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Java设计模式(学习整理)---单例模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1、概念:
java中單例模式是一種常見的設計模式,單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種。
  單例模式有一下特點:
  1、單例類只能有一個實例。
  2、單例類必須自己自己創建自己的唯一實例。
  3、單例類必須給所有其他對象提供這一實例。
單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。在計算機系統中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每臺計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。總之,選擇單例模式就是為了避免不一致狀態,避免政出多頭。
2、舉例說明:
2.1懶漢式單例
1 /** 2 * 單例模式測試: 3 * ---懶漢模式 4 * @author 小風微靈 5 * 6 */ 7 public class SingleMode { 8 9 /* 10 * 第一步:創建一個本身的私有對象:不初始化 11 */ 12 private static SingleMode single=null; 13 14 /** 15 * 第二步:私有化構造器:使得該類不能被new出對象 16 */ 17 private SingleMode(){} 18 19 /** 20 * 第三步:一個靜態的獲取私有對象方法 21 */ 22 public static SingleMode getInstance(){ 23 24 if(single==null){ 25 single=new SingleMode(); 26 } 27 return single; 28 } 29 }2.2餓漢式單例
1 /** 2 * 單例模式測試: 3 * ---餓漢模式 4 * @author 小風微靈 5 * 6 */ 7 public class SingleMode_EH { 8 /* 9 * 第一步:創建一個本身的私有對象:初始化 10 */ 11 private static SingleMode_EH single_=new SingleMode_EH(); 12 13 /** 14 * 第二步:私有化構造器:使得該類不能被new出對象 15 */ 16 private SingleMode_EH(){} 17 18 /** 19 * 第三步:一個靜態的獲取私有對象方法 20 */ 21 public static SingleMode_EH getInstance(){ 22 23 return single_; 24 } 25 }?2.3登記式單例
?
1 package mode_single; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /** 7 * 單例模式測試: 8 * ---登記式單例模式 9 * @author 小風微靈 10 * 11 */ 12 public class SingleMode_DJS { 13 private static Map<String,SingleMode_DJS> map = new HashMap<String,SingleMode_DJS>(); 14 /** 15 * 靜態塊:事先把實例存放在表Map中 16 */ 17 static{ 18 SingleMode_DJS single = new SingleMode_DJS(); 19 map.put(single.getClass().getName(), single); 20 } 21 /** 22 * 構造器:受保護 23 */ 24 protected SingleMode_DJS(){} 25 /** 26 * 靜態工廠方法,返還此類惟一的實例 27 * @param name Map集合中的實例"鍵":的名稱 28 * @return 返回登記式單例對象 29 */ 30 public static SingleMode_DJS getInstance(String name) { 31 if(name == null) { 32 name = SingleMode_DJS.class.getName(); 33 } 34 if(map.get(name) == null) { 35 try{ 36 map.put(name, (SingleMode_DJS) Class.forName(name).newInstance()); 37 } catch (InstantiationException e) { 38 e.printStackTrace(); 39 } catch (IllegalAccessException e) { 40 e.printStackTrace(); 41 } catch (ClassNotFoundException e) { 42 e.printStackTrace(); 43 } 44 } 45 return map.get(name); 46 } 47 }?
轉載于:https://www.cnblogs.com/newwind/p/5652544.html
總結
以上是生活随笔為你收集整理的Java设计模式(学习整理)---单例模式的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Redis 字符串(String)
 - 下一篇: linux随机10字母病毒