Heim >Backend-Entwicklung >PHP-Tutorial >Was ist das PHP-Factory-Methodenmuster?
Das PHP-Factory-Methodenmuster ist ein Erstellungsmuster und eines der am häufigsten verwendeten Designmuster. Das Factory-Muster ist auch in einfaches Factory-Muster, Factory-Methodenmuster, statisches Factory-Muster und abstraktes Factory-Muster unterteilt Die Factory-Methode besteht darin, einfache Factory-Skalierbarkeitsprobleme zu lösen.
Zugehörigkeit: Erstellungsmuster, häufig verwendet Eines der Entwurfsmuster
Das Fabrikmuster ist unterteilt in: einfaches Fabrikmuster, Fabrikmethodenmuster, statisches Fabrikmuster und abstraktes Fabrikmuster.
Das Folgende ist das Factory-Methodenmuster.
Die Fabrikmethode besteht darin, das Skalierbarkeitsproblem der einfachen Fabrik zu lösen.
In In der Vergangenheit musste die einfache Fabrik erweitert werden, was gegen den Grundsatz verstößt, dass das Entwurfsmuster für externe Erweiterungen offen und für interne Änderungen geschlossen ist. Daher habe ich ein Fabrikmethodenmuster erstellt ist mein Verständnis,
Beteiligte Elemente:
Fabrikklasse (instanziiertes Produkt A)
Fabrikklasse (instanziiertes Produkt B)
Produktklasse A
Produktklasse B
Eine Mall-Website unterstützt mehrere Zahlungsfunktionen, wie Alipay, WeChat, eine bestimmte Bank, eine bestimmte Bank ... So entwerfen Sie das Programm.
Wenn Sie dem einfachen Fabrikmodell folgen und eine Fabrikklasse deklarieren und die Fabrikklasse bestimmen lässt, welche Zahlungsmethode aufgerufen werden soll, muss jedes Mal, wenn eine Zahlungsmethode aufgerufen wird, eine kontinuierliche Änderungsoperation der Fabrikklasse durchgeführt werden hinzugefügt, die Fabrikklasse muss geändert werden.
Zu lösende Probleme:
1. Das Problem des [Offenen und geschlossenen] Prinzips auf einfache Weise lösen Fabrik
Das Flussdiagramm lautet wie folgt:
Programmiercode: 1. php<?php namespace factory_method; include '../autoload.php'; // 张三支付 $param = []; $param['name'] = '张三'; $param['money'] = 100; $factory = new WeiXinFactory(); $mode = $factory->createMode(); // 使用工厂类获取产品类 $mode->doAction($param); // 执行产品类方法2. Factory-Klassenschnittstelle, Alipay-Zahlungs-Factory-Klasse, WeChat-Zahlungs-Factory-Klasse, UnionPay-Zahlungs-Factory-Klasse. Factory-Klassenschnittstelle: PayFactoryInterface.php
<?php namespace factory_method;/** * 工厂类接口 * Interface PayFactoryInterface * @package factory_method */interface PayFactoryInterface { public function createMode(); }Alipay-Zahlungsfabrikklasse: ZhiFuBaoFactory.php
<?php namespace factory_method;/** * 支付宝产品类转工厂类 * Class ZhiFuBaoFactory * @package factory_method */class ZhiFuBaoFactory implements PayFactoryInterface { public function createMode() { return new ZhiFuBao(); } }WeChat-Zahlungsfabrikklasse: WeiXinFactory.php
<?php namespace factory_method;/** * 微信产品类转为工厂类 * Class WeiXinFactory * @package factory_method */class WeiXinFactory implements PayFactoryInterface { public function createMode() { return new WeiXin(); } }UnionPay-Zahlungsfabrikklasse: YinLianFactory.php
<?php namespace factory_method;/** * 银联产品类转工厂类 * Class YinLianFactory * @package factory_method */class YinLianFactory implements PayFactoryInterface { public function createMode() { return new Yinlian(); } }3. Produktklassenschnittstelle, Alipay-Zahlungsproduktklasse, WeChat-Zahlungsproduktklasse, UnionPay-Zahlungsproduktklasse. Produktschnittstelle: PayInterface.php
<?php namespace factory_method;/** * Interface PayInterface * 定义支付Api规范接口 */interface PayInterface { /** * 发起扣款 * @return mixed */ public function doAction($param); /** * 记录日志 * @return mixed */ public function payLog(); /** * 发送短信 * @return mixed */ public function sendNews(); }Alipay-Zahlungsproduktkategorie: ZhiFuBao.php
<?php namespace factory_method;// 银联class ZhiFuBao implements PayInterface { public function doAction($param) { $name = $param['name']; $money = $param['money']; echo $name . '使用支付宝支付,支付金额' . $money; } /** * 记录日志 */ public function payLog() { } /** * 发送消息 */ public function sendNews() { } }WeChat-Zahlungsproduktkategorie: WeiXin.php
<?php namespace factory_method;// 银联class WeiXin implements PayInterface { public function doAction($param) { $name = $param['name']; $money = $param['money']; echo $name . '使用微信支付,支付金额' . $money; } /** * 记录日志 */ public function payLog() { } /** * 发送消息 */ public function sendNews() { } }UnionPay Zahlungsproduktkategorie: Yinlian.php
<?php namespace factory_method;// 银联class Yinlian implements PayInterface { public function doAction($param) { $name = $param['name']; $money = $param['money']; echo $name . '使用银联支付,支付金额' . $money; } /** * 记录日志 */ public function payLog() { } /** * 发送消息 */ public function sendNews() { } }Das Folgende ist die Quellcode-Adresse GitHub-Quellcode-Adresse: https://github.com/xiaobaoword/design_pattern/tree/master
Das obige ist der detaillierte Inhalt vonWas ist das PHP-Factory-Methodenmuster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!