摘要:工廠模式使一個類的實例化延遲到其子類。參考系列源地址系列目錄設(shè)計模式概述設(shè)計模式一簡單工廠模式設(shè)計模式二工廠方法模式設(shè)計模式三抽象工廠模式設(shè)計模式四單例模式
一、什么是簡單工廠模式
簡單工廠 (Simple Factory)又稱靜態(tài)工廠方法模式(Static Factory Method Pattern)
使用的頻率可以說是非常之高,它的官方解釋為:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。工廠模式使一個類的實例化延遲到其子類。
這個模式本身很簡單而且使用在業(yè)務較簡單的情況下。一般用于小項目或者具體產(chǎn)品擴展教師較少的情況(這樣工廠類才不用經(jīng)常更改)。
PS:不修改代碼的話,是無法擴展的。
二、簡單工廠模式的作用簡單工廠的作用是實例化對象,而不需要客戶了解這個對象屬于哪個具體的子類。簡單工廠實例化的類具有相同的接口或者基類,在子類比較固定并不需要擴展時,可以使用簡單工廠,一定程度上可以很好的降低耦合度。
三、案例支付寶、微信、銀聯(lián)的連接方式(connectMode),支付方式(payMode)。使用工廠模式,“客戶”就不需要不要知道具體的連接方式和支付方式了,只需要調(diào)用connectMode 和payMode即可。
MySQL、SQL Server、Oracle等數(shù)據(jù)庫的連接方式(connectMode)、查詢方式(selectMode)等操作可以使用工廠模式進行封裝。下面的例子會講到。
我們以數(shù)據(jù)庫類創(chuàng)建的案例來說:
產(chǎn)品類/** * 數(shù)據(jù)庫系列 * */ abstract Class DataBase { abstract function getOne($sql); //獲取一條數(shù)據(jù)的方法 } Class SqlServer extends DataBase { function __construct() { $connect = "SqlServer 連接方法操作 (騰訊云服務器)"; return $connect } function getOne($sql){ return "查詢后返回數(shù)據(jù)結(jié)果"; } } Class MySql extends DataBase { function __construct(){ $connect = "MySql 連接方法操作 (阿里云服務器)"; return $connect } function getOne($sql){ return "查詢后返回數(shù)據(jù)結(jié)果"; } }工廠類
/** * * 創(chuàng)建數(shù)據(jù)庫的工廠類 */ class Factory { static function createDataBase($type) { switch ($type) { case SqlServer: return new SqlServer(); case MySql: return new MySql(); //.... } }客戶類
/** * * 客戶通過工廠獲取數(shù)據(jù) */ class Customer { private $database; function getDataBase($type) { return $this->database = Factory::createDataBase($type); } } $custome = new Customer; $db = $custome->getDataBase("SqlServer"); // 我要獲取阿里云的SQL Server數(shù)據(jù)庫的數(shù)據(jù)。 $data = $db->getOne($sql);四、組成部分
通過以上案例可以得知一般情況下工廠模式由以下幾個部分組成:
工廠類角色:這是本模式的核心,含有一定的商業(yè)邏輯和判斷邏輯,根據(jù)邏輯不同,產(chǎn)生具體的工廠產(chǎn)品。如例子中的Factory類。
抽象產(chǎn)品角色:它一般是具體產(chǎn)品繼承的父類或者實現(xiàn)的接口。由接口或者抽象類來實現(xiàn)。如例中的DataBase接口。
具體產(chǎn)品角色:工廠類所創(chuàng)建的對象就是此角色的實例。在JAVA中由一個具體類實現(xiàn),如例子中的MySql和SqlServer類。
使用工廠設(shè)計模式時必須先歸類你的產(chǎn)品(需求)找到共同點和特征,然后根據(jù)共同的地方創(chuàng)建各自的產(chǎn)品類,這時候如果沒有無法通過客戶類去調(diào)用每一個產(chǎn)品類,那么耦合度會大大增高(在需求變動的時候), 這時候創(chuàng)建一個工廠類統(tǒng)一管理產(chǎn)品類,再通過客戶類調(diào)用。 那么可以很好的管理代碼并一定程度上的解耦。
參考 系列源地址WilburXu/design_pattern
系列目錄PHP 設(shè)計模式概述
PHP設(shè)計模式(一)簡單工廠模式 (Simple Factory For PHP)
PHP設(shè)計模式(二)工廠方法模式(Factory Method)
PHP設(shè)計模式(三)抽象工廠模式(Abstract Factory)
PHP設(shè)計模式(四)單例模式(Singleton)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29490.html
摘要:創(chuàng)建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設(shè)計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設(shè)計模式(Design pattern)是什么 設(shè)計模式是一套被反復使用、多數(shù)人知曉、經(jīng)過分類編目的代碼設(shè)計的經(jīng)驗總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會有設(shè)計模式 在軟件開發(fā)過...
摘要:支持增加任意產(chǎn)品抽象工廠用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。對于增加新的產(chǎn)品,無能為力支持增加產(chǎn)品族參考系列源地址系列目錄設(shè)計模式概述設(shè)計模式一簡單工廠模式設(shè)計模式二工廠方法模式設(shè)計模式三抽象工廠模式設(shè)計模式四單例模式 一、什么是抽象工廠模式 抽象工廠模式的用意為:給客戶端提供一個接口,可以創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象 ,而且使用抽象工廠模式還要滿足以下條件: 系統(tǒng)中有多個產(chǎn)品族,而系統(tǒng)一次...
摘要:對于這個問題,接下來的工廠方法模式可以解決這個問題。二工廠方法模式的優(yōu)點擁有良好的封裝性,代碼結(jié)構(gòu)清晰。參考系列源地址系列目錄設(shè)計模式概述設(shè)計模式一簡單工廠模式設(shè)計模式二工廠方法模式設(shè)計模式三抽象工廠模式設(shè)計模式四單例模式 簡單工廠簡述: 簡單工廠模式實現(xiàn)了產(chǎn)品類的代碼跟客戶端代碼分離,但會有一個問題,優(yōu)秀的代碼是符合開閉原則如果你要加一個C類產(chǎn)品,你就要修改工廠類里面的代碼,也就是說...
摘要:一什么是單例設(shè)計模式單例模式,也叫單子模式,是一種常用的軟件設(shè)計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。 一、什么是單例設(shè)計模式 單例模式,也叫單子模式,是一種常用的軟件設(shè)計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。 二、單例模式的技巧 利用$_instance私有變量來保存類的唯一實例化對象; 設(shè)計一個getInstance對外公開的函數(shù),...
摘要:創(chuàng)建型設(shè)計模式通過控制這個對象的創(chuàng)建方式來解決此問題。通過這樣做,這些模式增加了執(zhí)行此通信的靈活性。已于年月日翻譯完畢,參與用戶人,詳細列表請見參與譯者。 showImg(https://segmentfault.com/img/bV6R8Q?w=1024&h=683); 翻譯進度請見:https://laravel-china.org/doc... 設(shè)計模式不僅代表著更快開發(fā)健壯軟件...
閱讀 1902·2021-11-12 10:36
閱讀 2357·2021-09-01 10:29
閱讀 2391·2019-08-30 15:56
閱讀 1042·2019-08-30 12:56
閱讀 2374·2019-08-26 13:58
閱讀 2308·2019-08-23 18:38
閱讀 1527·2019-08-23 18:32
閱讀 2132·2019-08-23 16:53