工廠模式
實現:定義一個用于創建對象的接口,讓子類決定實例化哪一個類。
應用場景:眾多子類并且會擴充、創建方法比較復雜。
工廠模式分為三種:簡單工廠、工廠方法、抽象工廠 ,
三種工廠的區別是,抽象工廠由多條產品線,而工廠方法只有一條產品線,是抽象工廠的簡化。而工廠方法和簡單工廠相對,大家初看起來好像工廠方法增加了許多代碼但是實現的功能和簡單工廠一樣。但本質是,簡單工廠并未嚴格遵循設計模式的開閉原則,當需要增加新產品時也需要修改工廠代碼。但是工廠方法則嚴格遵守開閉原則,模式只負責抽象工廠接口,具體工廠交給客戶去擴展。在分工時,核心工程師負責抽象工廠和抽象產品的定義,業務工程師負責具體工廠和具體產品的實現。只要抽象層設計的好,框架就是非常穩定的。
代碼如下:
/** * 工廠模式 *///抽象產品interface Person { html' target='_blank'>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工廠模式的簡單介紹的詳細內容,更多請關注 其它相關文章!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答