亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP設計模式之工廠模式實例總結

2024-05-04 23:59:57
字體:
來源:轉載
供稿:網友

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

使用工廠模式的目的或目標?

工廠模式的最大優點在于創建對象上面,就是把創建對象的過程封裝起來,這樣隨時可以產生一個新的對象。

減少代碼進行復制粘帖,耦合關系重,牽一發動其他部分代碼。

通俗的說,以前創建一個對象要使用new,現在把這個過程封裝起來了。

假設不使用工廠模式:那么很多地方調用類a,代碼就會這樣子創建一個實例:new a(),假設某天需要把a類的名稱修改,意味著很多調用的代碼都要修改。

工廠模式的優點就在創建對象上。

工廠模式的優點就在創建對象上。建立一個工廠(一個函數或一個類方法)來制造新的對象,它的任務就是把對象的創建過程都封裝起來,

創建對象不是使用new的形式了。而是定義一個方法,用于創建對象實例。

每個類可能會需要連接數據庫。那么就將連接數據庫封裝在一個類中。以后在其他類中通過類名:

為什么引入抽象的概念?

想一想,在現實生活中,當我們無法確定某個具體的東西的時候,往往把一類東西歸于抽象類別。

工廠方法:

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

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

你的工廠是綜合型的,是生產“一系列”產品,而不是“一個”,比如:生產“香煙”,還有“啤酒”等。然后它也可以有派生出來的具體的工廠,但這些工廠都是生產這一系列產品,只是可能因為地域不一樣,為了適應當地人口味,味道也不太一樣。

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

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

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

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

這樣子讓我聯想到框架中經常會有負責生成具體類實例的方法供調用。

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

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

將會生成得到order這個實例。傳遞不同的參數得到不同的類實例,這個就符合工廠模式。

pc_base:load_app_class("comment"');//生成一個comment類實例

當然load_app_class這個方法里面還會結合了單件模式的思想。避免調用n次,就重復創建n個相同的實例

工廠模式我想到的一個典型的應用就是:php可能要鏈接mysql,也可能要鏈接sqlserver,還有其他什么數據庫。那么做一個抽象的數據庫類,

這個類就是一個工廠類,專門負責產生不同的對象。

這樣子做很方便擴展。我們在直接鏈接數據庫的時候,不是使用代碼

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

的形式

而可以動態生成一個連接數據庫的實例??梢允莔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 ('對應的數據庫類沒找到');    }   }}DbFactory::factory("mysql");DbFactory::factory("oracle");

在thinkphp框架中也有對應的實現:

Db.class.php就是一個工廠類(也可以叫做數據庫中間層,之所以叫做中間層,是因為可以操作mysql、oracle等各數據庫。而這個類就是中間層作用,屏蔽掉具體的實現。讓程序員可以不改動原來的查詢代碼。中間層來對接mysql、oracle等數據庫。

Db.class.php中有個factory()方法來創建不同的數據庫實例

public function factory($db_config='') {    // 讀取數據庫配置    $db_config = $this->parseConfig($db_config);    if(empty($db_config['dbms']))      throw_exception(L('_NO_DB_CONFIG_'));    // 數據庫類型    $this->dbType = ucwords(strtolower($db_config['dbms']));    $class = 'Db'. $this->dbType;    if(is_file(CORE_PATH.'Driver/Db/'.$class.'.class.php')) {      // 內置驅動      $path = CORE_PATH;    }else{ // 擴展驅動      $path = EXTEND_PATH;    }    // 檢查驅動類    if(require_cache($path.'Driver/Db/'.$class.'.class.php')) {      $db = new $class($db_config);      // 獲取當前的數據庫類型      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;}

還有做支付接口的時候,未來可能對應不同的支付網關:支付寶、財付通、網銀在線等。方便未來擴展,設計成工廠模式。定一個專門生產網關接口的工廠,抽象出來,做成接口形式,讓所有的子類都要實現它的接口。以后加一個支付方式,要使用哪一種支付方式,改變一下參數即可。

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

定義以下幾個類:

UserFactory 用戶工廠類,負責生成不同的用戶類
User:用戶類的基類,所有用戶類都是繼承這個類
不同角色的類:注冊用戶類、匿名用戶類、管理員用戶類

總結結束,歡迎指正!

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女人被黑人巨大进入al| 午夜精品一区二区三区av| 日韩精品日韩在线观看| 日韩在线中文视频| 欧美日韩国产一区二区三区| 日韩av最新在线观看| 久久久精品中文字幕| 亚洲欧美日韩网| 日韩精品中文在线观看| 91精品久久久久久久| 久久6精品影院| 国产在线视频一区| 91豆花精品一区| 日本成人黄色片| 中文字幕欧美日韩在线| 国产精品麻豆va在线播放| 精品一区电影国产| 欧美极度另类性三渗透| 黑人巨大精品欧美一区二区免费| 欧美精品久久一区二区| 热久久视久久精品18亚洲精品| 91影院在线免费观看视频| 亚洲国产高清自拍| 精品国产欧美一区二区五十路| 精品女厕一区二区三区| 日韩欧美中文字幕在线播放| 欧美成人激情图片网| 亚洲国产古装精品网站| 日韩在线观看免费全| 青青草原成人在线视频| 亚洲电影在线观看| 日韩av日韩在线观看| 欧美成人精品在线观看| 久久中文字幕国产| 精品小视频在线| 久久久久久久久久婷婷| 亚洲xxxxx电影| 国产91热爆ts人妖在线| 久久精品视频导航| 亚洲www视频| 国产精品爽爽爽爽爽爽在线观看| 亚洲人成在线观看| 欧美孕妇性xx| 亚洲毛片在线观看| 亚洲国模精品一区| 日本久久久久久久久久久| 亚洲男人的天堂在线播放| 久久久www成人免费精品| 一本一道久久a久久精品逆3p| 亚洲精品999| 九九热精品视频在线播放| 黄色精品一区二区| 国产精品久久久久免费a∨大胸| 国产精品视频免费在线观看| 欧美黑人xxx| 久久精品久久久久久国产 免费| 中文字幕久热精品视频在线| 国产一区二区成人| 51视频国产精品一区二区| 亚洲影视九九影院在线观看| 国产美女91呻吟求| 国外成人在线直播| 亚洲精品美女免费| 亚洲精品国产品国语在线| 亚洲精品一区中文字幕乱码| 91免费电影网站| 国产成人精品一区二区| 91视频免费网站| 亚洲欧美国产日韩中文字幕| 国产精品欧美风情| 欧美极品欧美精品欧美视频| 亚洲自拍偷拍第一页| 国产日韩精品综合网站| 最近2019中文字幕第三页视频| yw.139尤物在线精品视频| 97欧美精品一区二区三区| 久热精品视频在线观看| 午夜精品一区二区三区视频免费看| 亚洲欧洲在线看| 欧美国产精品va在线观看| 69久久夜色精品国产69| 日本电影亚洲天堂| 国产suv精品一区二区| 亚洲欧美日韩中文在线制服| www.亚洲男人天堂| 久久亚洲欧美日韩精品专区| 亚洲天堂av电影| 欧美极品少妇xxxxⅹ喷水| 91免费观看网站| 欧美在线视频网| 日本最新高清不卡中文字幕| 日韩免费观看在线观看| 日韩精品视频三区| 91国产美女视频| 欧美性xxxx极品hd欧美风情| 91人人爽人人爽人人精88v| 亚洲一区久久久| 国产精品美女主播| 性欧美亚洲xxxx乳在线观看| 另类专区欧美制服同性| 精品亚洲一区二区三区在线播放| 亚洲精品videossex少妇| 欧美一区二区三区图| 国产自产女人91一区在线观看| 欧美大胆在线视频| 精品无人区乱码1区2区3区在线| 欧美激情久久久| 欧美一级电影在线| 日韩精品中文字幕视频在线| 中文字幕亚洲精品| 久久天天躁狠狠躁老女人| 久久久久久伊人| 精品国产一区久久久| 亚洲国产黄色片| 亚洲精品综合久久中文字幕| 午夜精品免费视频| 精品亚洲国产视频| www.亚洲免费视频| 欧美大片va欧美在线播放| 国产精品久久久av久久久| 久久久成人精品视频| 亚洲欧美在线x视频| 国产999在线观看| 欧美一区二区三区四区在线| 亚洲v日韩v综合v精品v| 亚洲一区二区三区乱码aⅴ| 欧美日韩免费区域视频在线观看| 日本一欧美一欧美一亚洲视频| 亚洲综合社区网| 国产欧美一区二区三区视频| 久久97久久97精品免视看| 久热99视频在线观看| 伊人久久精品视频| 国产一区二区日韩| 国产精品精品一区二区三区午夜版| 欧美黑人狂野猛交老妇| 国产精品久久视频| 欧美成在线观看| 精品久久久久久久久久ntr影视| 国产一区二区三区日韩欧美| 国产成人精品综合久久久| 欧美肥老太性生活视频| 91久久精品日日躁夜夜躁国产| 97精品免费视频| 亚洲图片在线综合| 成人av资源在线播放| 中文字幕不卡在线视频极品| 日韩成人中文字幕在线观看| 4p变态网欧美系列| 日韩精品在线视频美女| 亚洲男人7777| 136fldh精品导航福利| 国产精品国产福利国产秒拍| 国产原创欧美精品| 欧美性生交大片免费| 成人精品一区二区三区| 91在线免费观看网站| 精品国产一区二区三区四区在线观看| 亚洲国产成人久久综合| 久久亚洲国产成人| 欧美成人免费在线观看| 一本色道久久88精品综合| 北条麻妃在线一区二区| 人人做人人澡人人爽欧美|