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

PHP 設計模式精解:工廠模式與抽象工廠

     編輯:PHP 相關知識

工廠模式:物件建立的封裝藝術

工廠模式的核心價值在於「封裝物件建立過程」。不再直接使用 new 硬編碼具體類別,而是透過工廠方法或抽象工廠統一管理實例化邏輯,大幅降低耦合,提升擴展性。

三種工廠形態對比

類型產品範圍結構特點適用場景
簡單工廠 單一產品族 一個工廠類,靜態方法根據參數返回實例 產品種類固定、建立邏輯簡單
工廠方法 單一產品族 抽象工廠定義介面,子類決定實例化哪個類 需延遲到子類決定具體實現
抽象工廠 多個產品族 提供介面創建一系列相關/相依物件,無需指定具體類 系統需支援多種產品系列(如跨資料庫、跨平台)

生活化類比

  • 工廠方法:「香菸工廠」只生產香菸,但有「七匹狼分廠」、「中華分廠」,各生產一款香菸。
  • 抽象工廠:「綜合消費品工廠」生產「香菸、啤酒、飲料」全系列。華東廠、華南廠各生產適應當地口味的全套產品。

程式碼實戰:資料庫連線工廠

<?php

// 產品介面
interface DB {
    public function connect(): void;
    public function exec(string $sql): void;
}

// 具體產品
class MysqlDB implements DB {
    public function __construct() { echo "MySQL DB 已建立\n"; }
    public function connect(): void { /* ... */ }
    public function exec(string $sql): void { /* ... */ }
}

class PostgreDB implements DB {
    public function __construct() { echo "PostgreSQL DB 已建立\n"; }
    public function connect(): void { /* ... */ }
    public function exec(string $sql): void { /* ... */ }
}

class MssqlDB implements DB {
    public function __construct() { echo "MSSQL DB 已建立\n"; }
    public function connect(): void { /* ... */ }
    public function exec(string $sql): void { /* ... */ }
}

// 簡單工廠(靜態工廠方法)
class DBFactory {
    public static function create(string $type): DB {
        $class = $type . 'DB';
        if (!class_exists($class)) {
            throw new InvalidArgumentException("不支援的資料庫類型: $type");
        }
        return new $class();
    }
}

// 客戶端使用
$mysql = DBFactory::create('Mysql');      // 輸出: MySQL DB 已建立
$postgre = DBFactory::create('Postgre');  // 輸出: PostgreSQL DB 已建立
$mssql = DBFactory::create('Mssql');      // 輸出: MSSQL DB 已建立

避坑指南

  • 工廠類職責單一:只負責建立物件,不包含業務邏輯。
  • 善用介面與依賴注入:客戶端依賴 DB 介面,而非具體類。
  • 擴展新資料庫只需新增實現類並註冊到工廠,符合開放封閉原則。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved