1. 程式人生 > 其它 >php工廠方法模式

php工廠方法模式

2. 工廠方法模式

此模式中,通過定義一個抽象的核心工廠類,並定義建立產品物件的介面,建立具體產品例項的工作延遲到其工廠子類去完成。這樣做的好處是核心類只關注工廠類的介面定義,而具體的產品例項交給具體的工廠子類去建立。當系統需要新增一個產品是,無需修改現有系統程式碼,只需要新增一個具體產品類和其對應的工廠子類,是系統的擴充套件性變得很好,符合面向物件程式設計的開閉原則;

角色:

  • Product:抽象產品類

  • ConcreteProduct:具體產品類

  • Factory:抽象工廠類

  • ConcreteFactory:具體工廠類

<?php 
interface Animal{
public function run();
public function say();
}
class Cat implements Animal
{
public function run(){
echo "I ran slowly <br>";
}
public function say(){
echo "I am Cat class <br>";
}
}
class Dog implements Animal
{
public function run(){
echo "I'm running fast <br>";
}
public function say(){
echo "I am Dog class <br>";
}
}
abstract class Factory{
abstract static function createAnimal();
}
class CatFactory extends Factory
{
public static function createAnimal()
{
return new Cat();
}
}
class DogFactory extends Factory
{
public static function createAnimal()
{
return new Dog();
}
}

$cat = CatFactory::createAnimal();
$cat->say();
$cat->run();

$dog = DogFactory::createAnimal();
$dog->say();
$dog->run();

工廠方法模式是簡單工廠模式的進一步抽象和推廣。由於使用了面向物件的多型性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。在工廠方法模式中,核心的工廠類不再負責所有產品的建立,而是將具體建立工作交給子類去做。這個核心類僅僅負責給出具體工廠必須實現的介面,而不負責產品類被例項化這種細節,這使得工廠方法模式可以允許系統在不修改工廠角色的情況下引進新產品。