摘要:單例模式用于為一個類生成一個唯一的對象。作為對象的創(chuàng)建模式,單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例,這個類稱為單例類。
單例模式(Singleton):用于為一個類生成一個唯一的對象。
最常用的地方是數(shù)據(jù)庫連接。 使用單例模式生成一個對象后,該對象可以被其它眾多對象所使用。
作為對象的創(chuàng)建模式,單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例,這個類稱為單例類。
單例模式(singleton)有三個特點
1、一個類只能有一個實例
2、它必須自行創(chuàng)建這個實例
3、它必須自行向整個系統(tǒng)提供這個實例
代碼示例:
/** * 單例類 * Singleton.class */ class Singleton { /** * 靜態(tài)成品變量 保存全局實例 */ private static $_instance = NULL; /** * 私有化默認構(gòu)造方法,保證外界無法直接實例化 */ private function __construct() { } /** * 靜態(tài)工廠方法,返還此類的唯一實例 */ public static function getInstance() { if (is_null(self::$_instance)) { self::$_instance = new Singleton(); // 或者這樣寫 // self::$_instance = new self(); } return self::$_instance; } /** * 防止用戶克隆實例 */ public function __clone(){ die("Clone is not allowed." . E_USER_ERROR); } /** * 測試用方法 */ public function test() { echo "Singleton Test OK!"; } } /** * 客戶端 */ class Client { /** * Main program. */ public static function main() { $instance = Singleton::getInstance(); $instance->test(); } } Client::main();
測試
include "Singleton.class"; $test_obj = Singleton::getInstance(); $ret = $test_obj->test();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21807.html
摘要:總之,選擇單例模式就是為了避免不一致狀態(tài),避免政出多頭。二餓漢式單例餓漢式單例類在類初始化時,已經(jīng)自行實例化靜態(tài)工廠方法餓漢式在類創(chuàng)建的同時就已經(jīng)創(chuàng)建好一個靜態(tài)的對象供系統(tǒng)使用,以后不再改變,所以天生是線程安全的。 概念: Java中單例模式是一種常見的設(shè)計模式,單例模式的寫法有好幾種,這里主要介紹兩種:懶漢式單例、餓漢式單例?! 卫J接幸韵绿攸c: 1、單例類只能有一個實例?!?..
摘要:這種情況帶來的后果是程序兩次創(chuàng)建了對象,這并不符合我們對單例模式的定義。實現(xiàn)的三個特性自由序列化線程安全保證單例。其次,有且僅有的構(gòu)造器,防止外部的額外構(gòu)造,這恰好與單例模式吻合。 單例模式保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。當(dāng)系統(tǒng)需要某個類只能有一個實例時,就可以采用單例模式。 保證單例模式僅有一個實例的核心思想是構(gòu)造方法私有化,即不允許外部調(diào)用該類的構(gòu)造方法。基于...
摘要:在設(shè)計模式一書中,將單例模式稱作單件模式。通過關(guān)鍵字,來保證不會同時有兩個線程進入該方法的實例對象改善多線程問題為了符合大多數(shù)程序,很明顯地,我們需要確保單例模式能在多線程的情況下正常工作。 在《Head First 設(shè)計模式》一書中,將單例模式稱作單件模式。這里為了適應(yīng)大環(huán)境,把它稱之為大家更熟悉的單例模式。 一、了解單例模式 1.1 什么是單例模式 單例模式確保一個類只有一個實例,...
摘要:博主按每天一個設(shè)計模式旨在初步領(lǐng)會設(shè)計模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語言實現(xiàn)。單例模式用途如果一個類負責(zé)連接數(shù)據(jù)庫的線程池日志記錄邏輯等等,此時需要單例模式來保證對象不被重復(fù)創(chuàng)建,以達到降低開銷的目的。 博主按:《每天一個設(shè)計模式》旨在初步領(lǐng)會設(shè)計模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語言實現(xiàn)。誠然,每種設(shè)計模式都有多種實...
摘要:博主按每天一個設(shè)計模式旨在初步領(lǐng)會設(shè)計模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語言實現(xiàn)。單例模式用途如果一個類負責(zé)連接數(shù)據(jù)庫的線程池日志記錄邏輯等等,此時需要單例模式來保證對象不被重復(fù)創(chuàng)建,以達到降低開銷的目的。 博主按:《每天一個設(shè)計模式》旨在初步領(lǐng)會設(shè)計模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語言實現(xiàn)。誠然,每種設(shè)計模式都有多種實...
閱讀 2813·2021-10-14 09:42
閱讀 3619·2021-10-11 10:59
閱讀 2953·2019-08-30 11:25
閱讀 3088·2019-08-29 16:25
閱讀 3234·2019-08-26 17:40
閱讀 1241·2019-08-26 13:30
閱讀 1155·2019-08-26 11:46
閱讀 1337·2019-08-23 15:22