php ファクトリ メソッド パターンは作成的なパターンであり、一般的に使用されるデザイン パターンの 1 つです。ファクトリ メソッド パターンは、単純なファクトリ パターン、ファクトリ メソッド パターン、静的ファクトリ パターン、抽象ファクトリ パターンにも分けられます。ファクトリ メソッドは、単純なファクトリのスケーラビリティの問題を解決することです。
# 所属: 作成モード、通常使用するデザインパターンの一つです。
ファクトリパターンは、単純ファクトリパターン、ファクトリメソッドパターン、静的ファクトリパターン、抽象ファクトリパターンに分類されます。
以下はファクトリ メソッドのパターンです。
ファクトリ メソッドは、単純なファクトリのスケーラビリティの問題を解決するものです。単純なファクトリを見ると、誰もがその欠点にも気づくと思います。以前は、単純なファクトリを拡張する必要がありましたが、ファクトリの内容を変更する必要がある場合、デザイン パターンは外部拡張に対してオープンで内部変更に対してクローズであるという原則に違反するため、ファクトリ メソッド パターンを作成しました。
関与する要素:
ファクトリ クラス (製品 A をインスタンス化)
ファクトリ クラス (製品 B をインスタンス化)
製品クラス A
製品class B
例をあげてください
単純なファクトリ モデルに従ってファクトリ クラスを宣言し、呼び出す支払いメソッドをファクトリ クラスに決定させる場合は、ファクトリ クラスの継続的な変更操作が必要になります。 [オープンとクローズ] の原則に違反します
解決すべき問題:
1. 単純なファクトリの[オープンとクローズ]の原則の問題を解決します
# フローチャートは次のとおりです:
credcred: `##1. 試験入口インデックス.php
<?php namespace factory_method; include '../autoload.php'; // 张三支付 $param = []; $param['name'] = '张三'; $param['money'] = 100; $factory = new WeiXinFactory(); $mode = $factory->createMode(); // 使用工厂类获取产品类 $mode->doAction($param); // 执行产品类方法
ファクトリ クラス インターフェイス: 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(); } }
<?php namespace factory_method;/** * 微信产品类转为工厂类 * Class WeiXinFactory * @package factory_method */class WeiXinFactory implements PayFactoryInterface { public function createMode() { return new WeiXin(); } }
<?php namespace factory_method;/** * 银联产品类转工厂类 * Class YinLianFactory * @package factory_method */class YinLianFactory implements PayFactoryInterface { public function createMode() { return new Yinlian(); } }
<?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(); }
<?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() { } }
<?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() { } }
<?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() { } }
以上がPHPファクトリーメソッドパターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。