單例模式(防繼承,防轉殖)

2021-07-07 09:11:26 字數 1862 閱讀 9450

<?php

//單列模式

// //1.普通類

// class singleton

// $s1 = new singleton();

// $s2 = new singleton();

// //注意,2個變數是同1個物件的時候才全等

// if ($s1 === $s2) else

// //2.封鎖new操作

// class singleton

// }

// $s1 = new singleton();//php fatal error: call to protected singleton::__construct()

// //3.留個介面來new物件

// class singleton

// public static function getins()

// }

// $s1 = singleton::getins();

// $s2 = singleton::getins();

// if ($s1 === $s2) else

// 先判斷例項

// class singleton

// public static function getins()

// return self::$ins;

// }

// }

// $s1 = singleton::getins();

// $s2 = singleton::getins();

// if ($s1 === $s2) else

// //繼承

// class a extends singleton

// }

// echo '

';// $s1 = new a();

// $s2 = new a();

// if ($s1 === $s2) else

// //5.防止繼承時被修改了許可權

// class singleton

// public static function getins()

// return self::$ins;

// }

// }

// $s1 = singleton::getins();

// $s2 = singleton::getins();

// if ($s1 === $s2) else

// //繼承

// // class a extends singleton

// // }

// //cannot override final method singleton::__construct()

// echo '';

// $s1 = singleton::getins();

// $s2 = clone $s1;

// if ($s1 === $s2) else

//6.防止被clone

class singleton

public static function getins()

return self::$ins;

}// 封鎖clone

final private function __clone(){}

}$s1 = singleton::getins();

$s2 = clone $s1; //call to private singleton::__clone() from context

if ($s1 === $s2) else

單例模式防資料併發 原創

防止資料併發目前我使用到兩種方式 資料表加鎖 使用單例模式 使用有狀態的單例模式,使用者一訪問單例類時,單例類狀態為初始狀態可以返回單例類例項,並將單例類狀態修改為狀態一 此時使用者二訪問單例類,因狀態為狀態一,返加null值,客戶端根據null值判斷有使用者正在使用單例類 當使用者一完成操作後將單...

python單例模式繼承 python單例模式

我們可以使用 new 這個特殊方法。該方法可以建立乙個其所在類的子類的物件。更可喜的是,我們的內建 object 基類實現了 new 方法,所以我們只需讓 sing 類繼承 object 類,就可以利用 object 的 new 方法來建立 sing 物件了。classsing object def...

繼承單例模式 php PHP設計模式之單例模式

單例模式,就是保持乙個物件只存在乙個例項。並且為該唯一例項提供乙個全域性的訪問點 一般是乙個靜態的getinstance方法 單例模式應用場景非常廣泛,例如 資料庫操作物件 日誌寫入物件 全域性配置解析物件 這些場景的共同特徵是從業務邏輯上來看執行期間改物件卻是只有乙個例項 不斷new多個例項會增加...