1. 程式人生 > 實用技巧 >Error: attempt to setup a Window for datatype VARCHAR 和 Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"b","_col1":"2"},"value&

Error: attempt to setup a Window for datatype VARCHAR 和 Hive Runtime Error while processing row (tag=0) {"key":{"_col0":"b","_col1":"2"},"value&

單例模式

-能夠保證一個類只有一個例項並提供一個訪問該例項的全域性節點

- 一個類只能有一個例項且該例項只能自己建立。

 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、違反單一職責原則。