最近天氣變化無常,身為程式猿的寡人!~終究難耐天氣的挑戰,病倒了,果然,程式猿還需多保養自己的身體,有句話這麼說:一生只有兩件事能報複你:不夠努力的辜負和過度消耗身體的後患。話不多說,開始吧。 一、什麼是簡單工廠模式 簡單工廠 (Simple Factory)又稱靜態工廠方法模式(Static Fa ...
最近天氣變化無常,身為程式猿的寡人!~終究難耐天氣的挑戰,病倒了,果然,程式猿還需多保養自己的身體,有句話這麼說:一生只有兩件事能報複你:不夠努力的辜負和過度消耗身體的後患。話不多說,開始吧。
一、什麼是簡單工廠模式
簡單工廠 (Simple Factory)又稱靜態工廠方法模式(Static Factory Method Pattern)
使用的頻率也是非常高,它的官方解釋為:定義一個用於創建對象的介面,讓子類決定實例化哪一個類。工廠模式使一個類的實例化延遲到其子類。
這個模式本身很簡單而且使用在業務較簡單的情況下。一般用於小項目或者具體產品很少擴展的情況(這樣工廠類才不用經常更改)。
PS:不修改代碼的話,是無法擴展的。
二、簡單工廠模式的作用
簡單工廠的作用是實例化對象,而不需要客戶瞭解這個對象屬於哪個具體的子類。簡單工廠實例化的類具有相同的介面或者基類,在子類比較固定並不需要擴展時,可以使用簡單工廠,一定程度上可以很好的降低耦合度。
三、使用場景
- 支付寶、微信、銀聯的連接方式(connectMode),支付方式(payMode)。 使用工廠模式,“客戶”就不需要不要知道具體的連接方式和支付方式了, 只需要調用connectMode 和payMode即可。
- MySql、SqlServer、Oracle等資料庫的連接方式(connectMode)、查詢方式(selectMode)等操作可以使用工廠模式進行封裝。下麵的例子會講到。
四、組成部分
- 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯,根據邏輯不同,產生具體的工廠產品。如例子中的Factory類。
- 抽象產品角色:它一般是具體產品繼承的父類或者實現的介面。由介面或者抽象類來實現。如例中的DataBase介面。
- 具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現,如例子中的MySql和SqlServer類。
產品類:
<?php /** * 資料庫系列 * */ 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"); // 我要獲取阿裡雲的SqlServer資料庫的數據。
$data = $db->getOne($sql);
先歸類你的產品(需求)找到共同點和特征,然後根據共同的地方 創建 各自的產品類, 這時候如果沒有 直接同個客戶類去調用每一個 產品類,那麼耦合度會大大增高(在需求變動的時候), 這時候創建一個工廠類統一管理產品類,再通過客戶類調用。 那麼可以很好的管理代碼並一定程度上的解耦。
如果有什麼疑問或者講錯的地方,歡迎大家留言。