ホームページ  >  記事  >  バックエンド開発  >  PHPファクトリーメソッドパターンとは何ですか?

PHPファクトリーメソッドパターンとは何ですか?

藏色散人
藏色散人オリジナル
2020-07-28 09:10:042655ブラウズ

php ファクトリ メソッド パターンは作成的なパターンであり、一般的に使用されるデザイン パターンの 1 つです。ファクトリ メソッド パターンは、単純なファクトリ パターン、ファクトリ メソッド パターン、静的ファクトリ パターン、抽象ファクトリ パターンにも分けられます。ファクトリ メソッドは、単純なファクトリのスケーラビリティの問題を解決することです。

PHPファクトリーメソッドパターンとは何ですか?

推奨: 「PHP チュートリアル

はじめに

# 所属: 作成モード、通常使用するデザインパターンの一つです。

ファクトリパターンは、単純ファクトリパターン、ファクトリメソッドパターン、静的ファクトリパターン、抽象ファクトリパターンに分類されます。

以下はファクトリ メソッドのパターンです。

パターンの概要

ファクトリ メソッドは、単純なファクトリのスケーラビリティの問題を解決するものです。単純なファクトリを見ると、誰もがその欠点にも気づくと思います。以前は、単純なファクトリを拡張する必要がありましたが、ファクトリの内容を変更する必要がある場合、デザイン パターンは外部拡張に対してオープンで内部変更に対してクローズであるという原則に違反するため、ファクトリ メソッド パターンを作成しました。

関与する要素:

ファクトリ クラス (製品 A をインスタンス化)

ファクトリ クラス (製品 B をインスタンス化)

製品クラス A


製品class B

例をあげてください

モールのウェブサイトでは、Alipay、WeChat、某銀行、某銀行…​​といった複数の決済機能をサポートしています...プログラムの設計方法。

単純なファクトリ モデルに従ってファクトリ クラスを宣言し、呼び出す支払いメソッドをファクトリ クラスに決定させる場合は、ファクトリ クラスの継続的な変更操作が必要になります。 [オープンとクローズ] の原則に違反します

解決すべき問題:

1. 単純なファクトリの[オープンとクローズ]の原則の問題を解決します

# フローチャートは次のとおりです:

credcred: `##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.ファクトリ クラス インターフェイス、Alipay 支払いファクトリ クラス、WeChat 支払いファクトリ クラス、UnionPay 支払いファクトリ クラス。

ファクトリ クラス インターフェイス: PayFactoryInterface.php

<?php

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

Alipay 支払いファクトリ クラス: ZhiFuBaoFactory.php

<?php
namespace factory_method;/**
 * 支付宝产品类转工厂类
 * Class ZhiFuBaoFactory
 * @package factory_method */class ZhiFuBaoFactory implements PayFactoryInterface
{    public function createMode()
    {        return new ZhiFuBao();
    }
}
WeChat 支払いファクトリ クラス: WeiXinFactory.php

<?php
namespace factory_method;/**
 * 微信产品类转为工厂类
 * Class WeiXinFactory
 * @package factory_method */class WeiXinFactory implements PayFactoryInterface
{    public function createMode()
    {        return new WeiXin();
    }
}
UnionPay 支払いファクトリ クラス: yingLianFactory.php

<?php
namespace factory_method;/**
 * 银联产品类转工厂类
 * Class YinLianFactory
 * @package factory_method */class YinLianFactory implements PayFactoryInterface
{    public function createMode()
    {        return new Yinlian();
    }
}
3. 製品クラス インターフェイス、Alipay 支払い製品クラス、WeChat 支払い製品クラス、UnionPay 支払い製品クラス。

製品インターフェース: 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 決済製品カテゴリ: 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 決済製品カテゴリ: 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支払い製品カテゴリ: yinglian.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()
    {

    }
}
以下はソース コード アドレスです

GitHub ソース コード アドレス: https://github.com/xiaabaoword/design_pattern/tree/master

以上がPHPファクトリーメソッドパターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。