關於單例模式的一些理解


單例模式作為設計模式中的常見模式,比較重要。個人有感寫了一些東西,助於自己理解單例模式。

首先:什么是單例模式?

  單例模式視為了避免重復生成同一個實例對象,而產生的一種模式。因為對象在內存中占據空間較大,相比而言,我們更希望對於相同的對象,不必要每次都新建同樣的對象。多個變量指向同一個對象。這樣可以節省內存開銷。

單例模式的核心是什么?

  核心就是三私一公;

  1、私有化的構造方法

  2、私有化的克隆方法

  3、私有化的靜態變量

  4、公共的靜態方法

  為什么要設置這三私一公呢?

  1、私有化的構造方法是為了避免在類外使用 new class  來創建對象實體,我們只允許使用我們設定好的公共方法來建立實例。

  2、私有化的克隆方法是為了避免在使用公共方法獲取實例后,再通過clone的方法將對象實體克隆出新的對象(這就不再是單一對象了)

  3、私有化的靜態變量,用於存儲類的實例化對象,至於為什么要是私有化靜態的,我在例子中會詳細介紹

  4、公共的靜態方法,用於存儲實例化的對象,供外界獲取

  

class only_ins
{
    //私有化的靜態變量
    private static $obj = null;

    //私有化克隆方法
    private function __clone()
    {
    }

    // 私有化構造方法
    private function __construct()
    {
    }

    //公共的靜態方法
    public static function get_obj()
    {
        if (self::$obj == null) self::$obj = new self();
        return self::$obj;
    }

    //$obj作為容器存儲實例,為什么要設為靜態屬性呢?因為外部只能通過靜態方法實例化對象;
    //而存儲容器又是在靜態方法中被調用的,所以必須是靜態的屬性
    //那為什么要設為私有變量呢?  個人想法 如果是共有的,那么外部就可以進行訪問,從而
    //可以修改此變量,那么就無法保證你下次獲取到的還是此類的對象了,
    //比如直接調用並胡亂修改$obj的值
    //  only_ins::$obj = 121
    //  那么下次再調用靜態公共方法獲取到的就不再是類的對象,而是數字121了

以上就是個人的一點關於單例模式的一些見解,如有不足,請見諒

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM