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