熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

java之單例設計模式

2013-11-23 18:58:32  來源: Java核心技術 

  設計模式解決某一類問題最行之有效的方法(java中有種通用設計模式)
  單例設計模式解決一個類在內存中只存在一個對象
  單例設計模式有兩種方式
  )餓漢式
  先初始化對象當類一進內存就創建好對象
  )懶漢式
  對象是方法被調用時才初始化也叫延時加載類進內存時對象還沒有存在只有通過方法調用時才建立對象
  單例設計模式是想要保證對象的唯一
  )為了避免其他程序過多建立該類對象先禁止其他程序建立該類對象
  )還為了讓其他程序可以訪問到該類對象只好在本類中自定義一個對象
  )為了方便其他程序對自定義對象的訪問可以對外其他一些訪問方式
利用這三步進行代碼實現
  )將構造函數私有化
  )在類中創建一個本類對象
  )提供一個方法可以獲取到該對象
  提示在單例設計模式中事物該怎麼描述還怎麼描述當需要將該事物的對象保證在內存中唯一時加上以上三步即可
代碼說明
  //)餓漢式
  [java]
  class Single
  {
  private int num;
  public void setNum(int num)
  {
  thisnum = num;
  }
  public int getNum()
  {
  return num;
  }
  //將構造函數私有化
  private Single(){}
  //在類中創建一個本類對象因為構造函數被私有化該類不能創建對象想在外部訪問所以將其靜態
  private static Single s = new Single()
  //提供一個方法可以獲取到該對象不能創建對象所以將方法靜態可以通過(類名方法名)的形式進行訪問
  public static Single getInstance()
  {
  return s;
  }
  }
  class SingleDemo
  {
  public static void main(String[] args)
  {
  //單例的構造函數被靜態後不能創建對象保證對象的唯一所以通過(類名方法名)的形式進行訪問
  Single s = SinglegetInstance()
  Single s = SinglegetInstance()
  ssetNum(
  Systemoutprintln(sgetNum())//結果因為Single單例裡面對對象和方法進行了靜態數據共享所以s的值
  }
  }

  //)懶漢式
  [java]
  class Single
  {
  private static Single s = null;//先建立一個空對象
  private Single(){}
  public static Single getInstance()
  {
  if(s==null)//判斷s是否為空為空的話就創建對象
  s = new Single()
  return s;
  }
  }
  這裡的懶漢式存在安全隱患通過加鎖方式解決問題但是問題解決了代碼增多了所以通常在實際開發時使用餓漢式
  [java]
  class Single
  {
  private static Single s = null;
  private Single(){}
  public static Single getInstance()
  {
  if(s==null)
  {
  synchronized(Singleclass)
  {
  if(s==null)
  s = new Single()
  }
  }
  return s;
  }
  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26060.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.