《PHP教程:淺析php工廠模式》要點:
本文介紹了PHP教程:淺析php工廠模式,希望對您有用。如果有疑問,可以聯系我們。
PHP實例本系列文章來總結一下設計模式在PHP中的應用,這是第二篇創建型模式之工廠模式.
PHP實例設計模式的一般介紹在第一篇文章講了,這里就不重復.
PHP實例工廠模式
PHP實例實現:定義一個用于創建對象的接口,讓子類決定實例化哪一個類.
應用場景:眾多子類并且會擴充、創建辦法比較復雜.
PHP實例工廠模式分為三種:簡單工廠、工廠辦法、抽象工廠 ,
PHP實例三種工廠的區別是,抽象工廠由多條產品線,而工廠辦法只有一條產品線,是抽象工廠的簡化.而工廠辦法和簡單工廠相對,大家初看起來好像工廠辦法增加了許多代碼但是實現的功能和簡單工廠一樣.但本質是,簡單工廠并未嚴格遵循設計模式的開閉原則,當需要增加新產品時也需要修改工廠代碼.但是工廠辦法則嚴格遵守開閉原則,模式只負責抽象工廠接口,具體工廠交給客戶去擴展.在分工時,核心工程師負責抽象工廠和抽象產品的定義,業務工程師負責具體工廠和具體產品的實現.只要抽象層設計的好,框架就是非常穩定的.
代碼如下:
/**
?* 工廠模式
?*/
//抽象產品
interface Person {
??? public function getName();
}
//具體產品實現
class Teacher implements Person {
??? function getName() {
??????? return "老師n";
??? }
}
class Student implements Person {
??? function getName() {
??????? return "學生n";
??? }
}
//簡單工廠
class SimpleFactory {
?????? public static function getPerson($type) {
????????????? $person = null;
????????????? if ($type == 'teacher') {
???????????????????? $person = new Teacher();
????????????? } elseif ($type == 'student') {
???????????????????? $person = new Student();
????????????? }
????????????? return $person;
?????? }
}
//簡單工廠調用
class SimpleClient {
?????? function main() {
????????????? // 如果不用工廠模式,則需要提前指定具體類
????????????? // $person = new Teacher();
????????????? // echo $person->getName();
????????????? // $person = new Student();
????????????? // echo $person->getName();
????????????? // 用工廠模式,則不需要知道對象由什么類產生,交給工廠去決定
????????????? $person = SimpleFactory::getPerson('teacher');
????????????? echo $person->getName();
????????????? $person = SimpleFactory::getPerson('student');
????????????? echo $person->getName();
?????? }
}
//工廠辦法
interface CommFactory {
??? public function getPerson();
}
//具體工廠實現
class StudentFactory implements CommFactory {
??? function getPerson(){
??????? return new Student();
??? }
}
class TeacherFactory implements CommFactory {
??? function getPerson() {
??????? return new Teacher();
??? }
}
//工廠辦法調用
class CommClient {
??? static function main() {
?????????? $factory = new TeacherFactory();
?????????? echo $factory->getPerson()->getName();
?????????? $factory = new StudentFactory();
?????????? echo $factory->getPerson()->getName();
??? }
}
//抽象工廠模式另一條產品線
interface Grade {
?????? function getYear();
}
//另一條產品線的具體產品
class Grade1 implements Grade {
?????? public function getYear() {
????????????? return '2003級';
?????? }
}
class Grade2 implements Grade {
?????? public function getYear() {
????????????? return '2004級';
?????? }
}
//抽象工廠
interface AbstractFactory {
?????? function getPerson();
?????? function getGrade();
}
//具體工廠可以產生每個產品線的產品
class Grade1TeacherFactory implements AbstractFactory {
?????? public function getPerson() {
????????????? return new Teacher();
?????? }
?????? public function getGrade() {
????????????? return new Grade1();
?????? }
}
class Grade1StudentFactory implements AbstractFactory {
?????? public function getPerson() {
????????????? return new Student();
?????? }
?????? public function getGrade() {
????????????? return new Grade1();
?????? }
}
class Grade2TeacherFactory implements AbstractFactory {
?????? public function getPerson() {
????????????? return new Teacher();
?????? }
?????? public function getGrade() {
????????????? return new Grade2();
?????? }
}
//抽象工廠調用
class FactoryClient {
?????? function printInfo($factory) {
????????????? echo $factory->getGrade()->getYear().$factory->getPerson()->getName();
?????? }
?????? function main() {
????????????? $client = new FactoryClient();
????????????? $factory = new Grade1TeacherFactory();
????????????? $client->printInfo($factory);
????????????? $factory = new Grade1StudentFactory();
????????????? $client->printInfo($factory);
????????????? $factory = new Grade2TeacherFactory();
????????????? $client->printInfo($factory);
?????? }
}
//簡單工廠
//SimpleClient::main();
//工廠辦法
//CommClient::main();
//抽象工廠
FactoryClient::main();
PHP實例小伙伴們了解了php設計模式中的工廠模式了吧,是不是挺簡單呢,接下來的文章我們將介紹下創建者模式
《PHP教程:淺析php工廠模式》是否對您有啟發,歡迎查看更多與《PHP教程:淺析php工廠模式》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/13807.html