簡單工廠 (Simple Factory)又稱靜態工廠方法模式(Static Factory Method Pattern)php
使用的頻率能夠說是很是之高,它的官方解釋爲:定義一個用於建立對象的接口,讓子類決定實例化哪個類。工廠模式使一個類的實例化延遲到其子類。sql
這個模式自己很簡單並且使用在業務較簡單的狀況下。通常用於小項目或者具體產品擴展教師較少的狀況(這樣工廠類纔不用常常更改)。數據庫
PS:不修改代碼的話,是沒法擴展的。segmentfault
簡單工廠的做用是實例化對象,而不須要客戶瞭解這個對象屬於哪一個具體的子類。簡單工廠實例化的類具備相同的接口或者基類,在子類比較固定並不須要擴展時,可使用簡單工廠,必定程度上能夠很好的下降耦合度。設計模式
咱們以數據庫類建立的案例來講:服務器
/** * 數據庫系列 * */ 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);
經過以上案例能夠得知通常狀況下工廠模式由如下幾個部分組成:微信
使用工廠設計模式時必須先歸類你的產品(需求)找到共同點和特徵,而後根據共同的地方建立各自的產品類,這時候若是沒有沒法經過客戶類去調用每個產品類,那麼耦合度會大大增高(在需求變更的時候), 這時候建立一個工廠類統一管理產品類,再經過客戶類調用。 那麼能夠很好的管理代碼並必定程度上的解耦。this