哪位大哥用通俗的語言給我介紹一下什麼是單例模式?最好可以有代碼跟隨(網上的語言太專業,表示理解不懂)
回複內容:
哪位大哥用通俗的語言給我介紹一下什麼是單例模式?最好可以有代碼跟隨(網上的語言太專業,表示理解不懂)
1、new ChuiZi() 就是產生一次執行個體,產生一次執行個體就是造一個鎚子。
2、如果你每次用到鎚子,你就造一個鎚子,那多費鐵啊,用地方儲存啊。電腦裡就是要用記憶體啊,要用資源啊。
3、於是就有人想,怎麼只用一個鎚子,而不是每次都New一個鎚子。
於是就有了單例模式 :
class ChuiZi { static private $_instance = NULL; public static function getInstance() { if(self::$_instance == NULL) { self::$_instance = new ChuiZi(); } return self::$_instance; }}// 這樣 ChuiZi::getInstance(); 大家就都是用同一個執行個體啦
4、雖然我們可以要求同伴都ChuiZi::getInstance()
這麼寫這麼調用。但是難免有人會new 一個,或者複製一個。那不就不是單個執行個體了!!!於是:
class ChuiZi { static private $_instance = NULL; public static function getInstance() { if(self::$_instance == NULL) { self::$_instance = new ChuiZi(); } return self::$_instance; } private function __construct() {} private function __clone() {}}
所以發現這設計模式,不是為了裝逼而是為瞭解決問題。
以上就是單例模式。
不要問我一個鎚子夠用嗎!!!
要是問我是不是所有情況都適合用單例,我倒是想好了一個案例:
new GirlFriend();
實現資源、對象、參數的共用,通常就是兩種實現方式,一種是靜態化,第二就是單例模型。
相比於靜態化,單例模型更加優雅一下,它可以更加方便的隨時釋放對象,更換對象,也能很好的與其他非靜態對象橋接。在很多其他場合,單例模型都有不錯的體現,比如iOS、Android中最基礎的Application類就是單例化的
說個用得比較多得實際案例吧
一般情況下,DB類都是應用了單例模式的.
執行個體化一次後,多次調用都不會被執行個體化,避免效能浪費.
單例!
目的就是為了防止產生多個執行個體化對象
第一次產生後放到類的一個靜態變數中,下次再執行個體化就直接返回這個靜態變數
單例模式就是某個類只能產生一個執行個體。這個類的建構函式用private修飾,這樣其他類就不能構造這個類的執行個體,只能由這個類自己執行個體化一個提供給別的類。
應用情境,比如某個類是控制某個生產線的運作流程,那麼這個類最好用單例模式。因為控制類只能有一個,多了的話,那麼多個類一起控制運作,豈不亂了套。
提供一種更好的寫法
private static $_instance;public static function getInstance(){ if (! self::$_instance instanceof self) { self::$_instance = new self(); } return self::$_instance;}