PHP的單例模式

來源:互聯網
上載者:User
哪位大哥用通俗的語言給我介紹一下什麼是單例模式?最好可以有代碼跟隨(網上的語言太專業,表示理解不懂)

回複內容:

哪位大哥用通俗的語言給我介紹一下什麼是單例模式?最好可以有代碼跟隨(網上的語言太專業,表示理解不懂)

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;}
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.