
說明
1.工廠模式解決的是如何不透過new建立實例物件。
2.有一些方法可以創建目標,而不是new。
如果想改變創建的物件類型,只需要改變工廠,使用這個工廠的所有程式碼就會自動改變。
3、通常與介面一起使用,應用程式不需要知道這些實例化類別的具體細節。
只要知道工廠回傳的是支援某個介面類別的類別就可以輕鬆使用。
實例
/**
* 抽像出一個人的介面 * Interface Person
*/
interface Person
{
public function showInfo();
}
/**
* 一個繼承於抽像人介面的學生類別 * Class Student
*/
class Student implements Person
{
public function showInfo()
{
echo "這是一個學生 n";
}
}
/**
* 一個繼承於抽像人介面的老師類別 * Class Teacher
*/
class Teacher implements Person
{
public function showInfo()
{
echo "這是老師 n";
}
}
/**
* 人工廠 * Class PersonFactory
*/
class PersonFactory
{
public static function factory($person_type)
{
// 將傳入的型別首字母大寫 $class_name = ucfirst($person_type);
if(class_exists($class_name)){
return new $class_name;
}else{
throw new Exception("類別:$class_name 不存在",1);
}
}
}
// 需要一個學生$student = PersonFactory::factory('student');
echo $student->showInfo();
// 需要一個老師的時候$teacher = PersonFactory::factory('teacher');
echo $teacher->showInfo();以上就是php工廠模式的介紹,希望對大家有幫助。