PHP中單例模式與工廠模式詳解
單例模式概念
單例模式是指整個應(yīng)用中類只有一個對象實(shí)例的設(shè)計(jì)模式。
單例模式的特點(diǎn)
一個類在整個應(yīng)用中只有一個實(shí)例
類必須自行創(chuàng)建這個實(shí)例
必須自行向整個系統(tǒng)提供這個實(shí)例
php中使用單例模式的原因
我用php大部分操作都是和各種數(shù)據(jù)庫打交道,包括mysql,redis,memcache等各種關(guān)系型和非關(guān)系型數(shù)據(jù)庫,所以一個應(yīng)用中會 存在大量連接數(shù)據(jù)庫的操作,如果不用單例模式,那每次都要new操作,但是每次new都會消耗大量的內(nèi)存資源和系統(tǒng)資源,而且每次打開和關(guān)閉數(shù)據(jù)庫連接都 是對數(shù)據(jù)庫的一種極大考驗(yàn)和浪費(fèi)。
需要一個保存類的唯一實(shí)例的靜態(tài)成員變量(通常$instance為私有變量)
構(gòu)造函數(shù)和克隆函數(shù)必須聲明為私有的,為了防止外部程序new類從而失去單例模式意義
必須提供一個訪問這個實(shí)例的公共靜態(tài)方法,從而返回唯一實(shí)例的一個引用
//設(shè)計(jì)模式 //單例模式 都是使用同一個對象 //class Ren //{ // public $name; // private static $dx; //存儲對象 // // private function __construct() // { // // } // // public static function DuiXiang() // { // if(empty(self::$dx)) // { // self:;$dx=new Ren(); // } // return self::$dx; // } //} // //$r= Ren::DuiXiang(); //把構(gòu)造函數(shù)變?yōu)樗接? //做了一個方法來間接造對象 //在該方法里面加限制
工廠類
是指包含一個專門用來創(chuàng)建其他對象的方法的類,工廠類在多態(tài)性編程實(shí)踐中是至關(guān)重要的,它允許動態(tài)的替換類,修改配置,通常會使應(yīng)用程序更加靈活,熟練掌握工廠模式高級PHP開發(fā)人員是很重要的。
工廠模式通常用來返回符合類似接口的不同的類,工廠的一種常見用法就是創(chuàng)建多態(tài)的提供者,從而允許我們基于應(yīng)用程序邏輯或者配置設(shè)置來決定應(yīng)實(shí)例化哪一個類,例如,可以使用這樣的提供者來擴(kuò)展一個類,而不需要重構(gòu)應(yīng)用程序的其他部分,從而使用新的擴(kuò)展后的名稱 。
通常,工廠模式有一個關(guān)鍵的構(gòu)造,根據(jù)一般原則命名為Factory的靜態(tài)方法,然而這只是一種原則,工廠方法可以任意命名,這個靜態(tài)還可以接受任意數(shù)據(jù)的參數(shù),必須返回一個對象。
class YunSuan { public $a; public $b; function Suan() { echo "對兩個數(shù)進(jìn)行運(yùn)算"; } class gongchang { //功能 : 給一個參數(shù),返回一個對象 static function chanpin($name) { switch($name) { case "'+": return new jia(); break; case "-"; return new jian(); break; } } } $a=gongchang::chanpin("+");
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)享元模式(flyweight)
這篇文章主要介紹了php設(shè)計(jì)模式中的享元模式,使用php實(shí)現(xiàn)享元模式,感興趣的小伙伴們可以參考一下2015-12-12PHP header()函數(shù)常用方法總結(jié)
這篇文章主要介紹了PHP header()函數(shù)常用方法.總結(jié)了常見的用法,需要的朋友可以參考下2014-04-04php5.2的curl-bug 服務(wù)器被php進(jìn)程卡死問題排查
這篇文章主要介紹了php5.2的curl-bug 服務(wù)器被php進(jìn)程卡死問題排查,需要的朋友可以參考下2016-09-09PHP的Yii框架中創(chuàng)建視圖和渲染視圖的方法詳解
這篇文章主要介紹了PHP的Yii框架中創(chuàng)建視圖和渲染視圖的方法詳解,包括CWidget小物件的講解及視圖中渲染另一個視圖的方法等,需要的朋友可以參考下2016-03-03PHP向socket服務(wù)器收發(fā)數(shù)據(jù)的方法
這篇文章主要介紹了PHP向socket服務(wù)器收發(fā)數(shù)據(jù)的方法,分析了socket收發(fā)數(shù)據(jù)的方法,并介紹了socket常用函數(shù),需要的朋友可以參考下2015-01-01