Maison  >  Article  >  développement back-end  >  Quel est le modèle de méthode de fabrique php ?

Quel est le modèle de méthode de fabrique php ?

藏色散人
藏色散人original
2020-07-28 09:10:042610parcourir

Le modèle de méthode d'usine PHP est un modèle de création et est l'un des modèles de conception couramment utilisés. Le modèle d'usine est également divisé en modèle d'usine simple, modèle de méthode d'usine, modèle d'usine statique et modèle d'usine abstrait, ainsi que le modèle d'usine PHP. La méthode d'usine consiste à résoudre des problèmes simples d'évolutivité d'usine.

Quel est le modèle de méthode de fabrique php ?

Recommandé : "Tutoriel PHP"

Introduction

 Affiliation : Modèle de création, couramment utilisé L'un des modèles de conception

Le modèle d'usine est divisé en : modèle d'usine simple, modèle de méthode d'usine, modèle d'usine statique et modèle d'usine abstrait.

Ce qui suit est le modèle de méthode d'usine.

Aperçu du modèle

La méthode d'usine consiste à résoudre le problème d'évolutivité des usines simples. Je pense que tout le monde trouvera également ses défauts en regardant les usines simples

Dans le passé. , les usines simples ont dû être étendues. Lorsque , vous devez modifier le contenu de l'usine, ce qui viole le principe selon lequel le modèle de conception est ouvert pour l'expansion externe et fermé pour la modification interne, j'ai donc créé un modèle de méthode d'usine.

Éléments impliqués :

  Classe d'usine (instancier le produit A)

Classe d'usine (instancier le produit B)
Classe de produit A

Classe de produit B

Donnez-moi un exemple

Un site Web de centre commercial prend en charge plusieurs fonctions de paiement, telles qu'Alipay, WeChat, une certaine banque, une certaine banque... Comment concevoir le programme.

Si vous suivez le modèle d'usine simple et déclarez une classe d'usine et laissez la classe d'usine déterminer le mode de paiement à appeler, alors il doit y avoir une opération de modification continue de la classe d'usine à chaque fois qu'un mode de paiement est utilisé. ajouté, la classe d'usine doit être modifiée. Viole le principe [Ouvert et Fermé]

Problèmes à résoudre :

1. Résoudre le problème du principe [Ouvert et Fermé] de manière simple. usine

L'organigramme est le suivant :

   

Code de programmation :

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); // 执行产品类方法

2. Interface de classe d'usine, classe d'usine de paiement Alipay, classe d'usine de paiement WeChat, classe d'usine de paiement UnionPay.

Interface de classe d'usine : PayFactoryInterface.php

<?php

namespace factory_method;/**
 * 工厂类接口
 * Interface PayFactoryInterface
 * @package factory_method */interface PayFactoryInterface
{    public function createMode();
}

Classe d'usine de paiement Alipay : ZhiFuBaoFactory.php

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

Classe d'usine de paiement WeChat : WeiXinFactory.php

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

Classe d'usine de paiement UnionPay : YinLianFactory.php

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

3. Interface de classe de produit, classe de produit de paiement Alipay, classe de produit de paiement WeChat, classe de produit de paiement UnionPay.

Interface produit : 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();
}

Catégorie de produit de paiement Alipay : 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()
    {

    }
}

Catégorie de produit de paiement WeChat : 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 Catégorie de produit de paiement : 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()
    {

    }
}

Voici l'adresse du code source

Adresse du code source GitHub : https://github.com/xiaobaoword/design_pattern/tree/master

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn