java單例設計模式總結及舉例

來源:互聯網
上載者:User

標籤:允許   分析   單例設計模式   無法   類別關係   構造方法   餓漢式   span   strong   

* 設計模式:前人總結出來的經驗,被後人直接拿來使用.
* 單例設計模式:一個類只允許有一個對象,將這個對象作為一個全域的訪問點,提供出去供大家使用.
* 分析:
*     1.使用者只能有一個對象
*     2.全域的訪問點:得到的對象就是全域的訪問點. 如何做到全域?讓static去修飾
*     3.如何提供出去?
*     4.供大家使用?--單例的功能
* 單例類的作用:
*   1.可以實現兩個對象之間的傳值
*   2.可以在全域範圍內調用很多的功能.
* 好處:可以讓兩個對象在完全沒有關係的前提下,實現值的傳遞,降低了耦合性,提高了內聚性
*   (耦合性,內聚性在微觀上說:描述的是類與類之間的關係。好處:我們應該盡量提高內聚性,減少耦合性,可以提高程式的健壯性,增加代碼的可移植性,方便實現模組兒化編程
*    如何做到低耦合高內聚? 在處理類與類別關係的時候,讓類之間的關係越緊密耦合性越高,內聚性越低.反之,關係越鬆散耦合性越低,內聚性越高.)
*/

分類:餓漢式、懶漢式:格式都差不多,懶漢式有一個判斷,但是兩者的大體架構都這樣,實在不理解可以背下來以後會明白的。
1、餓漢式-在定義變數的同時完成初始化

class SingleInstance{//建立單例類
  //2.在類的內部建立一個當前類型的屬性並賦值--在類的內部得到了當前類的一個對象
  //將變數私人化,讓外界無法直接存取 給變數用static修飾讓他成為全域的訪問點
   private static SingleInstance singleInstance = new SingleInstance();
  //1.將構造方法私人化
   private SingleInstance() {
  }
  //3.使用公用的方法將變數提出出去,並將方法設定成靜態
  public static SingleInstance getInstance(){
    return singleInstance;
  }
}
2、懶漢式-開始只是定義變數,什麼時候使用什麼時候賦值
class SingleInstance1{
   private static SingleInstance1 singleInstance = null;//先不賦值
  private SingleInstance1() {
  }
  public static SingleInstance1 getInstance(){
    if (singleInstance == null) {                   //判斷是否為空白
    singleInstance = new SingleInstance1();//用的時候再賦值
    }
    return singleInstance;
  }

  int num;//這個num供之後的舉例使用
}

//主函數:
public class Demo5 {
  public static void main(String[] args) {
  SingleInstance1 s1 = SingleInstance1.getInstance();
  SingleInstance1 s2 = SingleInstance1.getInstance();
  System.out.println(s1 == s2);//運行後輸出true,說明擷取到的是同一個對象
//執行個體:
//功能:將A類中num1的值傳給B類對象的num2
  A a = new A();
  a .num1 = 4;
  B b = new B();
// b.num2 = a.num1;       方法一:直接賦值,一般類的成員變數是私人的,所以不推薦
// b.test(a);      方法二:通過傳參間接賦值
// 方法三:通過單例實現傳值 :
  a.ceshi1();
  b.ceshi2();
  }
}
//測試單例的功能
class A{
  int num1;
//測試通過單例傳值
  public void ceshi1() {
    SingleInstance1 s1 = SingleInstance1.getInstance();
    s1.num = num1; //把num1傳給num
  }
}
class B{
  int num2;
//通過傳參賦值
  public void test(A a){
    num2 = a.num1;
  }
//測試通過單例傳值
  public void ceshi2(){
    SingleInstance1 s2 = SingleInstance1.getInstance();
    num2 = s2.num;//把num傳給num2
  }
}

文章原創,轉載請註明出處謝謝

java單例設計模式總結及舉例

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.