久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP設(shè)計(jì)模式之工廠模式實(shí)例總結(jié)

這篇文章主要介紹了PHP設(shè)計(jì)模式之工廠模式,簡單介紹了工廠模式的概念、原理并結(jié)合實(shí)例形式總結(jié)分析了工廠模式的具體定義及使用方法,需要的朋友可以參考下

本文實(shí)例講述了PHP設(shè)計(jì)模式之工廠模式。分享給大家供大家參考,具體如下:

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

工廠模式的最大優(yōu)點(diǎn)在于創(chuàng)建對(duì)象上面,就是把創(chuàng)建對(duì)象的過程封裝起來,這樣隨時(shí)可以產(chǎn)生一個(gè)新的對(duì)象。

減少代碼進(jìn)行復(fù)制粘帖,耦合關(guān)系重,牽一發(fā)動(dòng)其他部分代碼。

通俗的說,以前創(chuàng)建一個(gè)對(duì)象要使用new,現(xiàn)在把這個(gè)過程封裝起來了。

假設(shè)不使用工廠模式:那么很多地方調(diào)用類a,代碼就會(huì)這樣子創(chuàng)建一個(gè)實(shí)例:new a(),假設(shè)某天需要把a(bǔ)類的名稱修改,意味著很多調(diào)用的代碼都要修改。

工廠模式的優(yōu)點(diǎn)就在創(chuàng)建對(duì)象上。

工廠模式的優(yōu)點(diǎn)就在創(chuàng)建對(duì)象上。建立一個(gè)工廠(一個(gè)函數(shù)或一個(gè)類方法)來制造新的對(duì)象,它的任務(wù)就是把對(duì)象的創(chuàng)建過程都封裝起來,

創(chuàng)建對(duì)象不是使用new的形式了。而是定義一個(gè)方法,用于創(chuàng)建對(duì)象實(shí)例。

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

為什么引入抽象的概念?

想一想,在現(xiàn)實(shí)生活中,當(dāng)我們無法確定某個(gè)具體的東西的時(shí)候,往往把一類東西歸于抽象類別。

工廠方法:

比如你的工廠叫做“香煙工廠”,那么可以有“七匹狼工廠”“中華工廠”等,但是,這個(gè)工廠只生廠一種商品:香煙;

抽象工廠:無法描述它到底生產(chǎn)什么產(chǎn)品,它生產(chǎn)很多類型的產(chǎn)品(所以抽象工廠就會(huì)生成子工廠)。

你的工廠是綜合型的,是生產(chǎn)“一系列”產(chǎn)品,而不是“一個(gè)”,比如:生產(chǎn)“香煙”,還有“啤酒”等。然后它也可以有派生出來的具體的工廠,但這些工廠都是生產(chǎn)這一系列產(chǎn)品,只是可能因?yàn)榈赜虿灰粯樱瑸榱诉m應(yīng)當(dāng)?shù)厝丝谖?,味道也不太一樣?/p>

工廠模式:理解成只生成一種產(chǎn)品的工廠。比如生產(chǎn)香煙的。

工廠方法:工廠的一種產(chǎn)品生產(chǎn)線 。比如鍵盤的生成過程。

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

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

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

由于前面使用過phpcms,用phpcms的來幫助理解,更加好,如下:

pc_base:load_app_class("order"');//參數(shù)名稱就是類名稱。

將會(huì)生成得到order這個(gè)實(shí)例。傳遞不同的參數(shù)得到不同的類實(shí)例,這個(gè)就符合工廠模式。

pc_base:load_app_class("comment"');//生成一個(gè)comment類實(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ù)庫。那么做一個(gè)抽象的數(shù)據(jù)庫類,

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

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

new Mysql($host,$username,$password,$dbname)

的形式

而可以動(dòng)態(tài)生成一個(gè)連接數(shù)據(jù)庫的實(shí)例??梢允莔ysql,也可以是連接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ù)庫類沒找到');
    } 
  }
}
DbFactory::factory("mysql");
DbFactory::factory("oracle");

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

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

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

public function factory($db_config='') {
    // 讀取數(shù)據(jù)庫配置
    $db_config = $this->parseConfig($db_config);
    if(empty($db_config['dbms']))
      throw_exception(L('_NO_DB_CONFIG_'));
    // 數(shù)據(jù)庫類型
    $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)類
    if(require_cache($path.'Driver/Db/'.$class.'.class.php')) {
      $db = new $class($db_config);
      // 獲取當(dāng)前的數(shù)據(jù)庫類型
      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 {
      // 類沒有定義
      throw_exception(L('_NOT_SUPPORT_DB_').': ' . $db_config['dbms']);
    }
    return $db;
}

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對(duì)有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對(duì)比分析了php針對(duì)多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對(duì)此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 91女人18毛片水多国产 | 国产做受视频 | 日韩一级在线 | 亚洲成人免费在线观看 | 欧美日韩激情视频 | 欧美手机在线 | 国产伦精品一区二区三区视频我 | 成人精品免费视频 | 日韩精品毛片 | 免费a视频| 麻豆国产一区二区三区四区 | 国产成人97精品免费看片 | 亚洲视频在线免费观看 | 国产成人精 | 91亚洲国产成人精品性色 | 日本中文在线观看 | 成人xxx| 97福利视频 | 成人免费毛片男人用品 | 狠狠插狠狠操 | 精品欧美日韩 | 在线观看的av网站 | 亚洲第一黄网 | 国产剧情在线 | 久久免费视频观看 | 欧美人xxxx | 美女一级片| 久久久久女人精品毛片九一 | 性史性dvd影片农村毛片 | 国语av | 就要干就要操 | 精品久久久久久 | 在线观看av网站 | 国产天堂网 | 成人欧美一区二区三区黑人孕妇 | 在线国产一区 | a在线播放| 99在线视频免费观看 | 中文字幕影院 | 秋霞av在线 | 日韩在线欧美 |