四種方法實現單件 Singleton 模式

2021-06-16 07:16:35 字數 1221 閱讀 3954

單件模式確保乙個類只有有乙個例項,並提供乙個全域性訪問點。

總之 就是說,在這個類的生命週期中只有能產生乙個例項,那麼 如何 來控制這一切呢。首先,如果乙個類的constructor不是private的,那麼客戶端的**就可以隨意 的建立類的例項,這樣肯定是不能保證乙個類只有乙個例項的,唯一的方法就是保證這個類的建構函式為私有。

那麼,如果類的建構函式為私有了,也就是說客戶端無法建立類的例項了,它們怎麼得到這個類的例項呢,因為不能通過建構函式或者例項來獲得這個類的例項 ,所以我們提供乙個公有的靜態方法來提供類的這個唯一的例項 。

還有。在這過程 中我們應該考慮多執行緒的問題。

好了,上**。

方法一:採用急切初始化的方法

public class singleton1 

public static singleton1 getinstance()

}

方法二:採用同步方法

public class singleton2 

public static synchronized singleton2 getinstance()

return instance;

}}

法三:採用靜態巢狀類,這樣做是為了解決急切初始化所帶來 的問題。比如說這個物件很大,占有很多資源 ,如果建立了不用,那就是乙個巨大的浪費 。所以我們用下面的方法,在需要的時候再建立此類的例項。

public class singleton3 

private static class instanceholder

public static singleton3 getinstance()

}

方法四:先檢查是不是已經產生了此類的例項 ,如果 沒有再加鎖

public class singleton4 

public static singleton4 getinstance()

} return instance;

}}

還有人說為什麼不把那個靜態變數直接 設為public,大家想想,如果客戶端這樣設定:singleton.instance=null; 那麼其它執行緒獲取到的就會是null,這顯然 不是我們想要的。~~

9.13 by kevinjom

Python單例模式的四種方法

在這之前,先了解super 和 new 方法 super 方法 返回乙個父類或兄弟類型別的 物件,讓你能夠呼叫一些從繼承過來的方法。它有兩個典型作用 a.在單繼承的類層次結構中,super 可用於引用父類而不顯式父類名稱,從而使 更易於維護。b.在多重繼承中,可以保證公共父類僅被執行一次。new 方...

PHP遞迴四種方法

data json data str replace data arr json decode data true print r arr dir foreach arr as k v header content type text html charset utf 8 print r arr p...

執行緒同步四種方法

執行緒同步的方法 1 wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。2 sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉 interruptedexception異常。3 notify 喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並...