單例模式作為設計模式中的常見模式,比較重要。個人有感寫了一些東西,助於自己理解單例模式。
首先:什么是單例模式?
單例模式視為了避免重復生成同一個實例對象,而產生的一種模式。因為對象在內存中占據空間較大,相比而言,我們更希望對於相同的對象,不必要每次都新建同樣的對象。多個變量指向同一個對象。這樣可以節省內存開銷。
單例模式的核心是什么?
核心就是三私一公;
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了
以上就是個人的一點關於單例模式的一些見解,如有不足,請見諒