欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

php設(shè)計(jì)模式中工廠模式有什么用-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)php設(shè)計(jì)模式中工廠模式有什么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)建站-成都網(wǎng)站建設(shè)公司,專(zhuān)注成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷(xiāo)推廣,空間域名,網(wǎng)絡(luò)空間,綿陽(yáng)服務(wù)器托管有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問(wèn)題,請(qǐng)聯(lián)系創(chuàng)新互聯(lián)建站。

使用工廠模式的目的或目標(biāo)?

工廠模式的大優(yōu)點(diǎn)在于創(chuàng)建對(duì)象上面,就是把創(chuàng)建對(duì)象的過(guò)程封裝起來(lái),這樣隨時(shí)可以產(chǎn)生一個(gè)新的對(duì)象。
減少代碼進(jìn)行復(fù)制粘帖,耦合關(guān)系重,牽一發(fā)動(dòng)其他部分代碼。

通俗的說(shuō),以前創(chuàng)建一個(gè)對(duì)象要使用new,現(xiàn)在把這個(gè)過(guò)程封裝起來(lái)了。
假設(shè)不使用工廠模式:那么很多地方調(diào)用類(lèi)a,代碼就會(huì)這樣子創(chuàng)建一個(gè)實(shí)例:new a(),假設(shè)某天需要把a(bǔ)類(lèi)的名稱(chēng)修改,意味著很多調(diào)用的代碼都要修改。



工廠模式的優(yōu)點(diǎn)就在創(chuàng)建對(duì)象上。
工廠模式的優(yōu)點(diǎn)就在創(chuàng)建對(duì)象上。建立一個(gè)工廠(一個(gè)函數(shù)或一個(gè)類(lèi)方法)來(lái)制造新的對(duì)象,它的任務(wù)就是把對(duì)象的創(chuàng)建過(guò)程都封裝起來(lái),
創(chuàng)建對(duì)象不是使用new的形式了。而是定義一個(gè)方法,用于創(chuàng)建對(duì)象實(shí)例。

每個(gè)類(lèi)可能會(huì)需要連接數(shù)據(jù)庫(kù)。那么就將連接數(shù)據(jù)庫(kù)封裝在一個(gè)類(lèi)中。以后在其他類(lèi)中通過(guò)類(lèi)名:

為什么引入抽象的概念?
想一想,在現(xiàn)實(shí)生活中,當(dāng)我們無(wú)法確定某個(gè)具體的東西的時(shí)候,往往把一類(lèi)東西歸于抽象類(lèi)別。
工廠方法:
比如你的工廠叫做“香煙工廠”,那么可以有“七匹狼工廠”“中華工廠”等,但是,這個(gè)工廠只生廠一種商品:香煙;
抽象工廠:無(wú)法描述它到底生產(chǎn)什么產(chǎn)品,它生產(chǎn)很多類(lèi)型的產(chǎn)品(所以抽象工廠就會(huì)生成子工廠)。
你的工廠是綜合型的,是生產(chǎn)“一系列”產(chǎn)品,而不是“一個(gè)”,比如:生產(chǎn)“香煙”,還有“啤酒”等。然后它也可以有派生出來(lái)的具體的工廠,但這些工廠都是生產(chǎn)這一系列產(chǎn)品,只是可能因?yàn)榈赜虿灰粯樱瑸榱诉m應(yīng)當(dāng)?shù)厝丝谖?,味道也不太一樣?br/>工廠模式:理解成只生成一種產(chǎn)品的工廠。比如生產(chǎn)香煙的。
工廠方法:工廠的一種產(chǎn)品生產(chǎn)線 。比如鍵盤(pán)的生成過(guò)程。



別人會(huì)反駁:吃飽了沒(méi)事干,一定要修改類(lèi)名稱(chēng)呢?這個(gè)說(shuō)不定。一般都不會(huì)去修改類(lèi)名稱(chēng)。






其實(shí)工廠模式有很多變體,抓住精髓才是關(guān)鍵:只要是可以根據(jù)不同的參數(shù)生成不同的類(lèi)實(shí)例,那么就符合工廠模式的設(shè)計(jì)思想。

這樣子讓我聯(lián)想到框架中經(jīng)常會(huì)有負(fù)責(zé)生成具體類(lèi)實(shí)例的方法供調(diào)用。

由于前面使用過(guò)phpcms,用phpcms的來(lái)幫助理解,更加好,如下:


pc_base:load_app_class("order"');//參數(shù)名稱(chēng)就是類(lèi)名稱(chēng)。將會(huì)生成得到order這個(gè)實(shí)例。傳遞不同的參數(shù)得到不同的類(lèi)實(shí)例,這個(gè)就符合工廠模式。



pc_base:load_app_class("comment"');//生成一個(gè)comment類(lèi)實(shí)例

//當(dāng)然load_app_class這個(gè)方法里面還會(huì)結(jié)合了單件模式的思想。避免調(diào)用n次,就重復(fù)創(chuàng)建n個(gè)相同的實(shí)例









工廠模式我想到的一個(gè)典型的應(yīng)用就是:php可能要鏈接mysql,也可能要鏈接sqlserver,還有其他什么數(shù)據(jù)庫(kù)。那么做一個(gè)抽象的數(shù)據(jù)庫(kù)類(lèi),

這個(gè)類(lèi)就是一個(gè)工廠類(lèi),專(zhuān)門(mén)負(fù)責(zé)產(chǎn)生不同的對(duì)象。

這樣子做很方便擴(kuò)展。我們?cè)谥苯渔溄訑?shù)據(jù)庫(kù)的時(shí)候,不是使用代碼new Mysql($host,$username,$password,$dbname)的形式

而可以動(dòng)態(tài)生成一個(gè)連接數(shù)據(jù)庫(kù)的實(shí)例。可以是mysql,也可以是連接oracle的。

class DbFactory
{

function static factory($db_class_name)
{

       $db_class_name = strtolower($db_class_name);

       if (include_once 'Drivers/' . $db_class_name . '.php') {

    
           $classname = 'Driver_' . $db_class_name;
           return new $db_class_name;
       } else {
           throw new Exception ('對(duì)應(yīng)的數(shù)據(jù)庫(kù)類(lèi)沒(méi)找到');
       } 


}




}



DbFactory::factory("mysql");

DbFactory::factory("oracle");



在thinkphp框架中也有對(duì)應(yīng)的實(shí)現(xiàn):

Db.class.php就是一個(gè)工廠類(lèi)(也可以叫做數(shù)據(jù)庫(kù)中間層,之所以叫做中間層,是因?yàn)榭梢圆僮鱩ysql、oracle等各數(shù)據(jù)庫(kù)。而這個(gè)類(lèi)就是中間層作用,屏蔽掉具體的實(shí)現(xiàn)。讓程序員可以不改動(dòng)原來(lái)的查詢代碼。中間層來(lái)對(duì)接mysql、oracle等數(shù)據(jù)庫(kù)。



Db.class.php中有個(gè)factory()方法來(lái)創(chuàng)建不同的數(shù)據(jù)庫(kù)實(shí)例

   public function factory($db_config='') {
       // 讀取數(shù)據(jù)庫(kù)配置
       $db_config = $this->parseConfig($db_config);
       if(empty($db_config['dbms']))
           throw_exception(L('_NO_DB_CONFIG_'));
       // 數(shù)據(jù)庫(kù)類(lèi)型
       $this->dbType = ucwords(strtolower($db_config['dbms']));
       $class = 'Db'. $this->dbType;
       if(is_file(CORE_PATH.'Driver/Db/'.$class.'.class.php')) {
           // 內(nèi)置驅(qū)動(dòng)
           $path = CORE_PATH;
       }else{ // 擴(kuò)展驅(qū)動(dòng)
           $path = EXTEND_PATH;
       }
       // 檢查驅(qū)動(dòng)類(lèi)
       if(require_cache($path.'Driver/Db/'.$class.'.class.php')) {
           $db = new $class($db_config);
           // 獲取當(dāng)前的數(shù)據(jù)庫(kù)類(lèi)型
           if( 'pdo' != strtolower($db_config['dbms']) )
               $db->dbType = strtoupper($this->dbType);
           else
               $db->dbType = $this->_getDsnType($db_config['dsn']);
           if(APP_DEBUG) $db->debug   = true;
       }else {
           // 類(lèi)沒(méi)有定義
           throw_exception(L('_NOT_SUPPORT_DB_').': ' . $db_config['dbms']);
       }
       return $db;
   }





還有做支付接口的時(shí)候,未來(lái)可能對(duì)應(yīng)不同的支付網(wǎng)關(guān):支付寶、財(cái)付通、網(wǎng)銀在線等。方便未來(lái)擴(kuò)展,設(shè)計(jì)成工廠模式。定一個(gè)專(zhuān)門(mén)生產(chǎn)網(wǎng)關(guān)接口的工廠,抽象出來(lái),做成接口形式,讓所有的子類(lèi)都要實(shí)現(xiàn)它的接口。以后加一個(gè)支付方式,要使用哪一種支付方式,改變一下參數(shù)即可。


書(shū)籍<php權(quán)威編程>(英文名稱(chēng)為PHP 5 Power Programming)也提到一個(gè)工廠模式的例子,學(xué)到一招:在為用戶注冊(cè)的時(shí)候,分為很多種角色的用戶。比如冊(cè)用戶,匿名用戶、管理員用戶等。完全使用可以使用工廠的思想來(lái)實(shí)現(xiàn),代碼也容易維護(hù),為每種角色可以生成操作的類(lèi)。

定義以下幾個(gè)類(lèi):

UserFactory 用戶工廠類(lèi),負(fù)責(zé)生成不同的用戶類(lèi)
User:用戶類(lèi)的基類(lèi),所有用戶類(lèi)都是繼承這個(gè)類(lèi)
不同角色的類(lèi):注冊(cè)用戶類(lèi)、匿名用戶類(lèi)、管理員用戶類(lèi)

關(guān)于“php設(shè)計(jì)模式中工廠模式有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)名稱(chēng):php設(shè)計(jì)模式中工廠模式有什么用-創(chuàng)新互聯(lián)
分享鏈接:http://chinadenli.net/article0/eheoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、App設(shè)計(jì)、搜索引擎優(yōu)化Google、手機(jī)網(wǎng)站建設(shè)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
日韩国产亚洲欧美激情| 青青久久亚洲婷婷中文网| 欧美一级特黄大片做受大屁股 | 亚洲一区二区三区在线免费| 人妻偷人精品一区二区三区不卡| 国产日韩欧美一区二区| 国产一区一一一区麻豆| 国产精品免费不卡视频| 国产精品久久久久久久久久久痴汉| 五月婷婷六月丁香亚洲| 中文字幕佐山爱一区二区免费| 国产原创中文av在线播放| 亚洲欧美日本国产不卡| 熟妇久久人妻中文字幕| 美女被后入视频在线观看| 久久99青青精品免费| 日韩精品一区二区三区四区| 免费播放一区二区三区四区| 日韩美女偷拍视频久久| 日本道播放一区二区三区| 欧美性猛交内射老熟妇| 国产亚洲精品久久99| 91插插插外国一区二区婷婷| 日韩欧美91在线视频| 好吊日成人免费视频公开| 亚洲国产91精品视频| 一区二区福利在线视频| 国产亚洲精品香蕉视频播放| 女人精品内射国产99| 中文字幕区自拍偷拍区| 在线观看视频国产你懂的| 欧美一级特黄大片做受大屁股| 亚洲国产精品肉丝袜久久| 黄色国产一区二区三区| 欧美日韩校园春色激情偷拍| 男女午夜视频在线观看免费| 日本女优一色一伦一区二区三区 | 国产传媒中文字幕东京热| 亚洲中文字幕视频一区二区 | 亚洲精品av少妇在线观看| 亚洲中文字幕人妻av|