Error: attempt to setup a Window for datatype VARCHAR 和 Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"b","_col1":"2"},"value&
阿新 • • 發佈:2020-11-06
單例模式
-能夠保證一個類只有一個例項,並提供一個訪問該例項的全域性節點。
- 一個類只能有一個例項且該例項只能自己建立。
1 <?php
2 class Singleton
3 {
4 //新增私有靜態成員變數用於儲存單例例項
5 private static $instance;
6
7 //申明公有靜態方法用於獲取單例例項
8 public static function getInstance()
9 {
10 if (empty(self::$instance)) self::$instance = new self();
11
12 return self::$instance;
13 }
14
15 //私有預設構造方法,保證外界無法直接例項化
16 private function __construct()
17 {
18 }
19
20 //防止使用者克隆例項
21 public function __clone()
22 {
23 die('clone is not allow');
24 }
25
26 public function test()
27 {
28 echo 'Singleton test is success';
29 }
30 }
- 使用場景
1、想控制例項數目,節省系統資源的時候。如資料庫連線、類方法封裝(方法不使用關鍵字 static,通過 $instance 來呼叫不同方法)
2、需要更加嚴格地控制全域性變數,可以使用單例模式。
- 優點
1、在記憶體裡只有一個例項,僅在首次請求單例物件時對其進行初始化,減少了記憶體的開銷,尤其是頻繁的建立和銷燬例項(比如管理學院首頁頁面快取)。
2、避免對資源的多重佔用(比如寫檔案操作)。
3、獲得了一個指向該例項的全域性訪問節點。
- 缺點
1、沒有介面,無法繼承。
2、該模式在多執行緒環境下需要進行特殊處理,避免多個執行緒多次建立單例物件。
3、違反單一職責原則。