Heim > Backend-Entwicklung > PHP-Tutorial > Was ist das PHP-Factory-Methodenmuster?

Was ist das PHP-Factory-Methodenmuster?

藏色散人
Freigeben: 2023-04-09 11:32:02
Original
2700 Leute haben es durchsucht

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.

Was ist das PHP-Factory-Methodenmuster?

Empfohlen: „PHP-Tutorial

Einführung

 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.

Musterübersicht

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

Geben Sie mir ein Beispiel

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 &#39;../autoload.php&#39;;

// 张三支付
$param = [];
$param[&#39;name&#39;] = &#39;张三&#39;;
$param[&#39;money&#39;] = 100;


$factory = new WeiXinFactory();
$mode = $factory->createMode(); // 使用工厂类获取产品类
$mode->doAction($param); // 执行产品类方法
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

Alipay-Zahlungsfabrikklasse: ZhiFuBaoFactory.php

<?php
namespace factory_method;/**
 * 支付宝产品类转工厂类
 * Class ZhiFuBaoFactory
 * @package factory_method */class ZhiFuBaoFactory implements PayFactoryInterface
{    public function createMode()
    {        return new ZhiFuBao();
    }
}
Nach dem Login kopieren

WeChat-Zahlungsfabrikklasse: WeiXinFactory.php

<?php
namespace factory_method;/**
 * 微信产品类转为工厂类
 * Class WeiXinFactory
 * @package factory_method */class WeiXinFactory implements PayFactoryInterface
{    public function createMode()
    {        return new WeiXin();
    }
}
Nach dem Login kopieren

UnionPay-Zahlungsfabrikklasse: YinLianFactory.php

<?php
namespace factory_method;/**
 * 银联产品类转工厂类
 * Class YinLianFactory
 * @package factory_method */class YinLianFactory implements PayFactoryInterface
{    public function createMode()
    {        return new Yinlian();
    }
}
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

Alipay-Zahlungsproduktkategorie: ZhiFuBao.php

<?php
namespace factory_method;// 银联class ZhiFuBao implements PayInterface
{    public function doAction($param)
    {        $name = $param[&#39;name&#39;];        $money = $param[&#39;money&#39;];        echo $name . &#39;使用支付宝支付,支付金额&#39; . $money;
    }    /**
     * 记录日志     */
    public function payLog()
    {

    }    /**
     * 发送消息     */
    public function sendNews()
    {

    }
}
Nach dem Login kopieren

WeChat-Zahlungsproduktkategorie: WeiXin.php

<?php
namespace factory_method;// 银联class WeiXin implements PayInterface
{    public function doAction($param)
    {        $name = $param[&#39;name&#39;];        $money = $param[&#39;money&#39;];        echo $name . &#39;使用微信支付,支付金额&#39; . $money;
    }    /**
     * 记录日志     */
    public function payLog()
    {

    }    /**
     * 发送消息     */
    public function sendNews()
    {

    }
}
Nach dem Login kopieren

UnionPay Zahlungsproduktkategorie: Yinlian.php

<?php
namespace factory_method;// 银联class Yinlian implements PayInterface
{    public function doAction($param)
    {        $name = $param[&#39;name&#39;];        $money = $param[&#39;money&#39;];        echo $name . &#39;使用银联支付,支付金额&#39; . $money;
    }    /**
     * 记录日志     */
    public function payLog()
    {

    }    /**
     * 发送消息     */
    public function sendNews()
    {

    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage