在PHP中實(shí)現(xiàn)工廠模式,可以按照以下步驟進(jìn)行:
定義一個(gè)接口或者抽象類(lèi),作為產(chǎn)品的基類(lèi),包含產(chǎn)品的共同屬性和方法。
創(chuàng)建具體產(chǎn)品類(lèi),實(shí)現(xiàn)產(chǎn)品基類(lèi)的接口或者繼承抽象類(lèi),并實(shí)現(xiàn)具體產(chǎn)品的特定屬性和方法。
創(chuàng)建一個(gè)工廠類(lèi),用于創(chuàng)建具體產(chǎn)品的實(shí)例。
在工廠類(lèi)中定義一個(gè)方法,根據(jù)不同的參數(shù)創(chuàng)建不同的產(chǎn)品實(shí)例并返回。
在客戶端代碼中通過(guò)工廠類(lèi)創(chuàng)建產(chǎn)品實(shí)例。
示例代碼如下:
// Step 1: 定義產(chǎn)品基類(lèi)
interface Product {
public function getName();
}
// Step 2: 創(chuàng)建具體產(chǎn)品類(lèi)
class ConcreteProduct1 implements Product {
public function getName() {
return "Product 1";
}
}
class ConcreteProduct2 implements Product {
public function getName() {
return "Product 2";
}
}
// Step 3: 創(chuàng)建工廠類(lèi)
class Factory {
public function createProduct($type) {
switch ($type) {
case 1:
return new ConcreteProduct1();
case 2:
return new ConcreteProduct2();
default:
throw new InvalidArgumentException("Invalid product type.");
}
}
}
// Step 5: 使用工廠類(lèi)創(chuàng)建產(chǎn)品實(shí)例
$factory = new Factory();
$product1 = $factory->createProduct(1);
echo $product1->getName(); // 輸出:Product 1
$product2 = $factory->createProduct(2);
echo $product2->getName(); // 輸出:Product 2
通過(guò)工廠類(lèi)的createProduct方法,根據(jù)傳入的參數(shù)不同,可以創(chuàng)建不同類(lèi)型的產(chǎn)品實(shí)例。這樣就實(shí)現(xiàn)了工廠模式。