Der Inhalt dieses Artikels befasst sich mit PHP-Designmustern: Eine Einführung in das PHP-Factory-Muster (mit Code). Es hat einen gewissen Referenzwert. Ich hoffe, es wird für Sie hilfreich sein.
Factory-Muster ist eine Methode, die die Instanziierungsdetails einer Klasse verbirgt und dieselbe Instanziierungsmethode für eine Reihe von Klassen verwendet, wodurch die Möglichkeit zum Erstellen von Objekten für weitere Klassen, die dieselbe Schnittstelle implementieren, problemlos erweitert werden kann.
Beispielhafte Anwendungsszenarien sind:
1) Online-Zahlung
Es gibt viele Zahlungsmethoden, wie z. B. WeChat-Zahlung, Alipay-Zahlung, UnionPay-Zahlung usw. Die entsprechende Zahlungsmethode wird je nach Wahl des Benutzers übernommen
2) Besuchsstatistiken
In einem Projekt mit einem komplexeren Unternehmen greifen Benutzer auf verschiedene Objekte zu, z. B. auf Artikel, auf Autoren, auf Artikelverzeichnisse usw. Es handelt sich um denselben Zugriffsdatensatz, aber die aufgezeichneten Informationen sind unterschiedlich
Das Prinzip des Factory-Musters:
Entwerfen Sie zunächst eine Schnittstelle basierend auf dem gleichen Verhalten mehrerer Objekte, lassen Sie dann diese Klassen diese Schnittstelle implementieren und erstellen Sie dann eine Instanziierungsfabrik, die entsprechend instanziiert werden kann unterschiedliche Parameter im Werk. Verschiedene Typen.
Spezifische Implementierung des Factory-Musters:
/* * 形状接口 */interface Shape{ public function area();}/* * 长方形类,实现了形状接口 */class Rectangle implements Shape{ private $long; private $width; function __construct($long,$width) { $this->long = $long; $this->width = $width; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return $this->long * $this->width; } }/* * 正方形类,实现了形状接口 */class Square implements Shape{ private $width; function __construct($width) { $this->width = $width; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return pow($this->width,2); } }/* * 圆形类,实现了形状接口 */class Circle implements Shape{ private $radiu; function __construct($radiu) { $this->radiu = $radiu; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return pi()*pow($this->radiu,2); } }class ShapeFactory{ /* * 获取实例化的形状对象 * ...$args 表示接受不限个数的参数 */ public function getShpae(...$args) { /* * 第一个参数为形状名,后面的参数为形状的尺寸 */ switch($args[0]) { case 'Rectangle': return new Rectangle($args[1],$args[2]); break; case 'Square': return new Square($args[1]); break; case 'Circle': return new Circle($args[1]); break; } return null; } }$factory = new ShapeFactory();$shape = $factory->getShpae('Rectangle',2,3);$area[] = $shape->area();$shape = $factory->getShpae('Square',2);$area[] = $shape->area();$shape = $factory->getShpae('Circle',2);$area[] = $shape->area(); print_r($area);/* Array ( [0] => 6 [1] => 4 [2] => 12.566370614359 ) */
Empfohlene verwandte Artikel:
So erhalten Sie das Dateiverzeichnis der ersten Ebene in PHP (reiner Code)
Das obige ist der detaillierte Inhalt vonPHP Design Patterns: Einführung in PHP Factory Pattern (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!