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

1、什麼是簡單工廠模式

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

  使用的頻率能夠說是很是之高,它的官方解釋爲:定義一個用於建立對象的接口,讓子類決定實例化哪個類。工廠模式使一個類的實例化延遲到其子類。sql

  這個模式自己很簡單並且使用在業務較簡單的狀況下。通常用於小項目或者具體產品擴展教師較少的狀況(這樣工廠類纔不用常常更改)。數據庫

  PS:不修改代碼的話,是沒法擴展的。segmentfault

2、簡單工廠模式的做用

簡單工廠的做用是實例化對象,而不須要客戶瞭解這個對象屬於哪一個具體的子類。簡單工廠實例化的類具備相同的接口或者基類,在子類比較固定並不須要擴展時,可使用簡單工廠,必定程度上能夠很好的下降耦合度。設計模式

3、案例

  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);

4、組成部分

經過以上案例能夠得知通常狀況下工廠模式由如下幾個部分組成:微信

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

使用工廠設計模式時必須先歸類你的產品(需求)找到共同點和特徵,而後根據共同的地方建立各自的產品類,這時候若是沒有沒法經過客戶類去調用每個產品類,那麼耦合度會大大增高(在需求變更的時候), 這時候建立一個工廠類統一管理產品類,再經過客戶類調用。 那麼能夠很好的管理代碼並必定程度上的解耦。this

參考

系列源地址

WilburXu/design_pattern阿里雲

系列目錄

  1. PHP 設計模式概述
  2. PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)
  3. PHP設計模式(二)工廠方法模式(Factory Method)
  4. PHP設計模式(三)抽象工廠模式(Abstract Factory)
  5. PHP設計模式(四)單例模式(Singleton)
相關文章
相關標籤/搜索