Es gibt einen Standpunkt: Unter den 23 Mustern in GoF gibt es zwei, die sich auf Factory beziehen: Factory Method und Abstract Factory. Eine einfache Factory ist in „Einführung in das Design“ definiert Muster“-Modell. Ich (Hick) habe die relevanten Informationen durchgesehen und in Robert C. Martins „Agile Software Development: Prinzipien, Muster und Praktiken“ wurde der „Fabrikmodus“ direkt erwähnt. Wenn Sie sich für die konkrete Situation interessieren, können Sie diese im Detail prüfen.
„Factory-Muster ermöglichen es uns, Instanzen spezifischer Objekte zu erstellen, die auf abstrakten Schnittstellen basieren“, was die Verkörperung von DIP (Dependency Inversion Principle) ist. Wir können unterschiedliche, aber ähnliche Produkte (instanziierte Objekte) herstellen, indem wir unterschiedliche Anforderungen an eine Fabrik stellen.
Hey, die Leute sagen, dass die beste Dokumentation Code ist. Ich sage das nicht nur, ich kann es Ihnen auch beweisen (der Anzeigeeffekt hier ist nicht gut, es wird empfohlen, ihn zum Anzeigen in den PHP-Editor zu kopieren), im Folgenden sind „PHP-Handbuch“, „Kern-PHP-Programmierung“ usw. aufgeführt „PHP 5 Power“ Beispielanalyse des Factory-Modus in der Programmierung:
<?php /** * factory 模式 * * factory 的概念不像 Singleton 等模式那样, factory 模式比较 * 灵活。通常根据不同的要求能够"生产不同对象"(实例化类)就可以 * 归为 factory 模式或者其变体。 */ /** * 先用手册中一个简单的例子说明 factory 模式 * * 注意下面这段代码并不可执行,因为需要定义相应的数据库[Driver]类。 */ classDbFactory { // factory 方法 publicstaticfunctionfactory($type) { // 注意这里的包含文件应该是相关数据库的[Driver]类 if(include_once'Drivers/'.$type.'.php'){ $classname='Driver_'.$type; returnnew$classname; }else{ thrownewException('Driver not found'); } } } // 生成数据库(MySQL)连接对象, $DbCon=DbFactory::factory('MySQL'); // $DbCon = DbFactory::factory('SQLite'); /** * "Core PHP Programming" 中的例子 */ classFactory { private$registeredClasses=array(); staticprivate$instance=NULL; privatefunction__construct(){} staticfunctiongetInstance() { if(self::$instance==NULL) { self::$instance=newFactory(); } returnself::$instance; } functionregisterClass($id,$creator_func) { $this->registeredClasses[$id]=$creator_func; } functioncreateObject($id,$args) { if(!isset($this->registeredClasses[$id])) { return(NULL); } return($this->registeredClasses[$id]($args)); } } classMyClass { private$created; publicfunction__construct() { $created=time(); } publicfunctiongetCreated() { return($this->created); } } functionMyClassCreator() { return(newMyClass()); } $factory=Factory::getInstance(); $factory->registerClass(1234,"MyClassCreator"); $instance=$factory->createObject(1234,array()); /** * "PHP 5 Power Programming" 中的对 factory 模式的诠释 * * 一个 Factory 类通常都有一个方法负责接受参数,根据参数的不同来决定 * "生产"哪个类的实例。下面拿网站的用户作为例子,作为实际运用:把网站 * 用户分成匿名用户,普通(注册)用户,管理员。我们在类中进行用户的权限 * 控制---这样能够更好的展现 factory 类在整个类体系中所扮演的角色。 */ /** * 基类 User */ abstractclassUser { public$name=null; publicfunction__construct($name) { $this->name=$name; } functiongetName() { return$this->name; } // 权限控制方法 functionhasReadPermission() { returntrue; } functionhasModifyPermission() { returnfalse; } functionhasDeletePermission() { returnfalse; } } // 匿名用户类 classGuestUserextendsUser {} // 注册用户类 classCustomerUserextendsUser { functionhasModifyPermission() { returntrue; } } // 管理员类 classAdminUserextendsUser{ functionhasModifyPermission() { returntrue; } functionhasDeletePermission() { returntrue; } } /** * 用户 factory 类 */ classUserFactory{ privatestatic$users= array("Andi"=>"admin","Hick"=>"guest", "Derick"=>"customer"); staticfunctionCreate($name) { if(!isset(self::$users[$name])){ // 如果不存在对应的用户类,则提示错误 } switch(self::$users[$name]){ case"guest":returnnewGuestUser($name); case"customer":returnnewCustomerUser($name); case"admin":returnnewAdminUser($name); default:// 默认应该报错 } } } // 使用 factory 类实例化用户 $HickUser=UserFactory::Create('Hick'); echo$HickUser->name; ?>
Das Obige ist der Inhalt der Implementierung des Factory-Modus in PHP. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.org). php.cn)!