In the Factory Method Pattern, a factory method defines what functions must be available in the non-abstract or concrete factory. These functions must be able khổng lồ create objects that are extensions of a specific class. Which exact subclass is created will depend on the value of a parameter passed to the function.
In this example we have a factory method, AbstractFactoryMethod, that specifies the function, makePHPBook($param).
The concrete class OReillyFactoryMethod factory extends AbstractFactoryMethod, & can create the correct the extension of the AbstractPHPBook class for a given value of $param.
author = "Rasmus Lerdorf and Kevin Tatroe"; $this->title = "Programming PHP"; self::$oddOrEven = "even"; } else $this->author = "David Sklar and Adam Trachtenberg"; $this->title = "PHP Cookbook"; self::$oddOrEven = "odd"; } function getAuthor() return $this->author; function getTitle() return $this->title;}class SamsPHPBook extends AbstractPHPBook private $author; private $title; function __construct() //alternate randomly between 2 books mt_srand((double)microtime()*10000000); $rand_num = mt_rand(0,1); if (1 > $rand_num) $this->author = "George Schlossnagle"; $this->title = "Advanced PHP Programming"; else $this->author = "Christian Wenz"; $this->title = "PHP Phrasebook"; function getAuthor() return $this->author; function getTitle() return $this->title;class VisualQuickstartPHPBook extends AbstractPHPBook private $author; private $title; function __construct() $this->author = "Larry Ullman"; $this->title = "PHP for the World Wide Web"; function getAuthor() return $this->author; function getTitle() return $this->title; writeln("START TESTING FACTORY METHOD PATTERN"); writeln(""); writeln("testing OReillyFactoryMethod"); $factoryMethodInstance = new OReillyFactoryMethod; testFactoryMethod($factoryMethodInstance); writeln(""); writeln("testing SamsFactoryMethod"); $factoryMethodInstance = new SamsFactoryMethod; testFactoryMethod($factoryMethodInstance); writeln(""); writeln("END TESTING FACTORY METHOD PATTERN"); writeln(""); function testFactoryMethod($factoryMethodInstance) $phpUs = $factoryMethodInstance->makePHPBook("us"); writeln("us php Author: ".$phpUs->getAuthor()); writeln("us php Title: ".$phpUs->getTitle()); $phpUs = $factoryMethodInstance->makePHPBook("other"); writeln("other php Author: ".$phpUs->getAuthor()); writeln("other php Title: ".$phpUs->getTitle()); $phpUs = $factoryMethodInstance->makePHPBook("otherother"); writeln("otherother php Author: ".$phpUs->getAuthor()); writeln("otherother php Title: ".$phpUs->getTitle()); function writeln($line_in) echo $line_in.""; ?>OutputSTART TESTING FACTORY METHOD PATTERNtesting OReillyFactoryMethodus php Author: Rasmus Lerdorf & Kevin Tatroeus php Title: Programming PHPother php Author: George Schlossnagleother php Title: Advanced PHP Programmingotherother php Author: David Sklar và Adam Trachtenbergotherother php Title: PHP Cookbooktesting SamsFactoryMethodus php Author: Christian Wenzus php Title: PHP Phrasebookother php Author: Rasmus Lerdorf and Kevin Tatroeother php Title: Programming PHPotherother php Author: Larry Ullmanotherother php Title: PHP for the World Wide WebEND TESTING FACTORY METHOD PATTERN
Bạn đang xem: Design patterns in php: using factories
Java | Factory Method in Java | |
C++ | Factory Method in C++: Before and after | Factory Method in C++ |
PHP | Factory Method in PHP | |
Delphi | Factory Method in Delphi | |
Python | Factory Method in Python |
Xem thêm: Submit A Form Without Page Refresh Using Jquery, Jquery Ajax Submit A Multipart Form Data
Oh, và it is on sale right now.