首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 設計模式深度解析:工廠模式的原理、分類與實戰應用

     編輯:PHP 相關知識

什麼是工廠模式?

工廠模式是一種建立型設計模式,核心思想是:將物件的建立邏輯封裝在專門的「工廠類」中,呼叫端只需告知「要什麼」,無需關心「怎麼建立」。這就像你去餐廳點餐,只需告知服務生「我要一份牛排」,廚房如何烹飪、盤飾你完全不用操心。

為什麼需要工廠模式?

場景一:應對需求變更帶來的建構參數變動

專案後期若原本的類別需新增建構參數,若到處都是 new ClassName(),修改成本極高。工廠模式將建立邏輯集中,僅需調整工廠方法即可。

場景二:統一多種實作的介面(如資料庫驅動)

PHP 連接 MySQL 有 mysqli、PDO、mysql(已棄用)等多種方式。若業務代碼直接耦合具體實作,切換驅動將極其痛苦。工廠模式配合介面,可實現「面向介面編程,而非面向實作」。

工廠模式的三種常見形態

1. 簡單工廠(Simple Factory)

單一工廠類,靜態方法根據參數決定建立哪個產品。不屬於 GoF 23 種模式,但實務最常用。

<?php
interface Transport {
    public function go();
}

class Bus implements Transport {
    public function go() { echo "公車每站都停\n"; }
}
class Car implements Transport {
    public function go() { echo "轎車飛馳\n"; }
}
class Bike implements Transport {
    public function go() { echo "腳踏車慢悠悠\n"; }
}

class TransportFactory {
    public static function create($type) {
        switch ($type) {
            case 'bus':  return new Bus();
            case 'car':  return new Car();
            case 'bike': return new Bike();
            default:     throw new InvalidArgumentException("未知交通工具: $type");
        }
    }
}

// 使用
$vehicle = TransportFactory::create('car');
$vehicle->go(); // 輸出:轎車飛馳

2. 工廠方法模式(Factory Method)

定義一個建立物件的介面,由子類別決定實例化哪個類別。適用於「一個工廠對應一種產品」的擴展場景。

3. 抽象工廠模式(Abstract Factory)

提供一個介面,用於建立「相關或依賴物件的家族」,而無需指定具體類別。適用於多維度變化(如:不同資料庫 × 不同快取驅動)。

命名陷阱避坑指南

若工廠方法命名為 factory(),**千萬別將工廠類命名為 Factory**!因為 PHP 若類別與方法同名,舊版本會將其視為建構子(雖 PHP 7+ 已移除此特性,但為相容性與語義清晰,仍建議避免)。

實務經驗分享

許多新手急於用模式卻忽略基礎。筆者建議:先把 if/else、Session、資料庫操作寫熟,再思考如何重構為模式。真正的「恍然大悟」往往發生在你親手重構、踩坑、優化之後,而非背誦定義時。

工廠模式是通往「高內聚、低耦合」的關鍵橋樑。下一篇將介紹註冊樹模式,將單例與工廠產出的物件統一管理,敬請期待。

系列文章:

  • PHP 設計模式之 單例模式
  • PHP 設計模式之 工廠模式
  • PHP 設計模式之 註冊樹模式
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved