1. 程式人生 > >java學習之單例模式(餓漢式與懶漢式)

java學習之單例模式(餓漢式與懶漢式)

分用 單例設計 單例 null 並發 auth 設計 pack 過多

---恢復內容開始---

設計模式:解決某一類問題最行之有效的方法 java中有23種設計模式 今天學習其中一種:單例設計模式:解決一個類在內存只存在一個對象

想要保證對象唯一。

1.為了避免其他程序過多建立該類對象,先禁止其他程序建立該類對象

2.還為了讓其他程序可以訪問到該類對象,只好在本類中,自定義一個對象

3.為了方便其他程序對自定義對象的訪問,可以對外提供一些訪問方式

這三部分用代碼體現:

1.將構造函數私有化

2.在類中創建一個本類對象

3.提供一個方法可以獲取到該對象

package com.dreamly.day02;

/**
 * @author dreamly
 *
 
*/ public class SingleDemo { /** * 原則:定義單例,建議使用餓漢式,懶漢式在並發時容易出現實例化混亂的問題,只有加鎖和多線程雙重判斷才能解決問題,相比餓漢式,代碼量長了判斷多了而且費時費力 * */ public static void main(String[] args) { Single s1=Single.getInstance(); Single s2=Single.getInstance(); System.out.println(s1==s2); } }
/* * 這個是先初始化對象 * 稱為:餓漢式 * Single類一進入內存,就已經創建好了對象 /* class Single{ private Single() {} private static Single s=new Single(); public static Single getInstance() { return s; } } */ /* * 對象是在方法被調用時,才初始化,又叫對象的延時加載 * 稱為:懶漢式 * Single類進內存,對象還沒有存在,只有調用了getInstance方法時,才建立對象 */ class
Single{ private static Single s=null; private Single() {}; public static Single getInstance() { if(s==null) { synchronized (Single.class) { if(s==null) { s=new Single(); } } } return s; } }

---恢復內容結束---

java學習之單例模式(餓漢式與懶漢式)