程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 淺談JAVASE單例設計形式

淺談JAVASE單例設計形式

編輯:關於JAVA

淺談JAVASE單例設計形式。本站提示廣大學習愛好者:(淺談JAVASE單例設計形式)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談JAVASE單例設計形式正文


簡略的說設計形式,其實就是對成績卓有成效的處理方法。其實它是一種思惟。

1.單例設計形式。

      處理的成績:就是可以包管一個類在內存中的對象獨一性。(單個實例)

      應用單例設計形式需求:必需關於多個法式應用統一個設置裝備擺設信息對象時,就須要包管該對象的獨一性。

      若何包管對象獨一性?                                                      處理步調:

      1.不許可其他法式用new創立該對象。                                            1.公有化該類結構函數。

      2.在該類創立一個本類實例。                                                         2.經由過程new 在該類中創立一個本類對象。

      3.對外供給一個辦法讓其他法式可以獲得該對象。                            3.界說一個私有的辦法,將創立的對象前往。

//餓漢式(開辟經常用)
class Single//類一加載,對象就曾經存在了。
{
  private static Single s = new Single();
 
  private Single(){}
 
  public static Single getInstance()
  {
    return s;
  }
}
 

 

//懶漢式(面試經常問,在多線程並發拜訪時刻有能夠招致不克不及包管不了對象的獨一性,存在平安隱患!)
class Single2//類加載出去,沒有對象,只要挪用了getInstance辦法時,才會創立對象。
      //延遲加載情勢。 
{
  private static Single2 s = null;
 
  private Single2(){}
 
  public static Single2 getInstance()
  {
    if(s==null)
      s = new Single2();
    return s;
  }
}
 
//挪用類
class SingleDemo
{
  public static void main(String[] args) 
  {
    Single s1 = Single.getInstance();
    Single s2 = Single.getInstance();
 
    System.out.println(s1==s2);
     
//   Single ss = Single.s; //此處不采取這個是由於弗成控,采取 Single.getInstance();可以傳參數停止響應挪用。
 
  }
}

餓漢式單例類在本身被加載時就將本身實例化。即使加載器是靜態的,在餓漢式單例類被加載時仍會將本身實例化。單從資本應用效力角度來說,這個比懶漢式單例類稍差些。趕快度和反響時光角度來說,則比懶漢式單例類稍好些。

3.掛號式:

代碼:

package pattern.singleton;import java.util.HashMap;import java.util.Map;
 //掛號式單例類.
 //相似Spring外面的辦法,將類名注冊,下次從外面直接獲得。
public class Singleton3 {
 private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
 static{
 Singleton3 single = new Singleton3();
 map.put(single.getClass().getName(), single);
 }
 //掩護的默許結構子
protected Singleton3(){}
 //靜態工場辦法,返還此類唯一的實例
public static Singleton3 getInstance(String name) {
 if(name == null) {
 name = Singleton3.class.getName();
 System.out.println("name == null"+"--->name="+name);
 }
 if(map.get(name) == null) {
 try {
 map.put(name, (Singleton3) 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) {
 Singleton3 single3 = Singleton3.getInstance(null);
 System.out.println(single3.about());
 }
 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved