PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)

WilburXu發表於2019-02-16

一、什麼是簡單工廠模式

簡單工廠 (Simple Factory)又稱靜態工廠方法模式(Static Factory Method Pattern)

  使用的頻率可以說是非常之高,它的官方解釋為:定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠模式使一個類的例項化延遲到其子類。

  這個模式本身很簡單而且使用在業務較簡單的情況下。一般用於小專案或者具體產品擴充套件教師較少的情況(這樣工廠類才不用經常更改)。

  PS:不修改程式碼的話,是無法擴充套件的。

二、簡單工廠模式的作用

簡單工廠的作用是例項化物件,而不需要客戶瞭解這個物件屬於哪個具體的子類。簡單工廠例項化的類具有相同的介面或者基類,在子類比較固定並不需要擴充套件時,可以使用簡單工廠,一定程度上可以很好的降低耦合度。

三、案例

  1. 支付寶、微信、銀聯的連線方式(connectMode),支付方式(payMode)。使用工廠模式,“客戶”就不需要不要知道具體的連線方式和支付方式了,只需要呼叫connectMode 和payMode即可。
  2. 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);

四、組成部分

通過以上案例可以得知一般情況下工廠模式由以下幾個部分組成:

  1. 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯,根據邏輯不同,產生具體的工廠產品。如例子中的Factory類。
  2. 抽象產品角色:它一般是具體產品繼承的父類或者實現的介面。由介面或者抽象類來實現。如例中的DataBase介面。
  3. 具體產品角色:工廠類所建立的物件就是此角色的例項。在JAVA中由一個具體類實現,如例子中的MySql和SqlServer類。

使用工廠設計模式時必須先歸類你的產品(需求)找到共同點和特徵,然後根據共同的地方建立各自的產品類,這時候如果沒有無法通過客戶類去呼叫每一個產品類,那麼耦合度會大大增高(在需求變動的時候), 這時候建立一個工廠類統一管理產品類,再通過客戶類呼叫。 那麼可以很好的管理程式碼並一定程度上的解耦。

參考

系列源地址

WilburXu/design_pattern

系列目錄

  1. PHP 設計模式概述
  2. PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)
  3. PHP設計模式(二)工廠方法模式(Factory Method)
  4. PHP設計模式(三)抽象工廠模式(Abstract Factory)
  5. PHP設計模式(四)單例模式(Singleton)

相關文章