この記事では、PHP デザイン パターンの単純なファクトリ パターンについて説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
まずは簡単な工場から始めましょう 面接でも他人からのインタビューでも、設計パターンについて聞かれると、ほとんどの人が工場パターンを挙げるでしょう。デザイン パターンの中で、いくつかの工場関連のパターンが最も有名で広く使用されていることは間違いありません。 GoF のデザイン パターンも創造的なパターンです。
しかし、Simple Factory、Factory Pattern、Abstract Factory Pattern の 3 つのモードを説明できる人は、面接官に非常に好印象を与えることができます。 。ここには、本当に明確に説明できるという前提がありますが、私を含むほとんどの人は、デザインパターンを深く学ぶ前にそれを明確に説明することはできません。私が面接に行く場合でも、他の人に面接する場合でも。他人にインタビューするとき、私は大まかな概要しか伝えることができません。面接に行ったときは、大まかな概要だけを話しました。数々の挫折を経験した結果、デザインパターンを徹底的に研究してみようと思い立ち、この連載が生まれました。この単純なファクトリーから始めて、デザインパターンをもう一度深く勉強してみましょう。
単純ファクトリは静的ファクトリとも呼ばれ、GoF 23 デザイン パターンには属しません。しかし、すべてのデザイン パターンの中で、おそらく誰にとっても最も理解しやすいと言えます。おそらく、このデザイン パターンをコード内ですでに何度も使用しているかもしれません。最も単純なコードセグメントから始めましょう。
// Factory class Factory { public static function createProduct(string $type) : Product { $product = null; switch ($type) { case 'A': $product = new ProductA(); break; case 'B': $product = new ProductB(); break; } return $product; } }
はい、核心は真ん中のシンプルなスイッチコードで、戻り値の型をProductインターフェースの実装として修正しました。
このコードでは、PHP の新機能である パラメータの型 と 戻り値の型
製品インターフェイスと製品の実装
// Products interface Product { public function show(); } class ProductA implements Product { public function show() { echo 'Show ProductA'; } } class ProductB implements Product { public function show() { echo 'Show ProductB'; } }
最後に、クライアントの使用は非常に簡単です
// Client $productA = Factory::createProduct('A'); $productB = Factory::createProduct('B'); $productA->show(); $productB->show();
上記のコードからわかるように、実際、ここには渡した文字列に基づくファクトリ クラスがあります。またはユーザーが作成したその他の定義識別子を使用して、対応する製品 (Product オブジェクト) を返します。
より視覚的な比喩: 私は携帯電話を販売する卸売業者 (クライアント、ビジネス側) です。携帯電話 (製品) のバッチが必要なので、Foxconn (工場) に行きます。プロデュースを手伝ってもらうために。注文($type変数)してモデルを指定すると、Foxconnが対応するモデルの電話をくれて、作業を続けました。Foxconnと協力するのは本当に楽しかったです。
ここでのより標準化された書き方は、すべての製品が統一インターフェイスを実装し、クライアントはインターフェイス メソッドを統一的に呼び出す方法だけを知っているということです。標準化されていない場合、統合ファサード管理のファサード モードと同様に、インターフェイスを使用してさまざまなオブジェクトを返すことができません。
ソース コード アドレス: シンプルなファクトリの基本クラス図の実装
https://github.com/zhangyue0503/designpatterns-php/blob/ master /01.simple-factory/source/simple-factory.php
シナリオ: SMS 送信機能モジュール。現在、Alibaba Cloud、Diexin、Jiguang の 3 社の SMS サービスを使用しています。事業ごとに異なる SMS 送信者が使用されている場合があります。Simple Factory を使用すると、この要件を簡単に満たすことができます。
クラス図:
コード:
<?php interface Message { public function send(string $msg); } class AliYunMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '阿里云短信(原阿里大鱼)发送成功!短信内容:' . $msg; } } class BaiduYunMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '百度SMS短信发送成功!短信内容:' . $msg; } } class JiguangMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '极光短信发送成功!短信内容:' . $msg; } } Class MessageFactory { public static function createFactory($type){ switch($type){ case 'Ali': return new AliYunMessage(); case 'BD': return new BaiduYunMessage(); case 'JG': return new JiguangMessage(); default: return null; } } } // 当前业务需要使用极光 $message = MessageFactory::createMessage('Ali'); echo $message->send('您有新的短消息,请查收');
ソースコードアドレス : シンプル ファクトリ インスタンス - SMS 送信ファクトリー
https://github.com/zhangyue0503/designpatterns-php/blob/master/01.simple-factory/source/simple-factory-message.php
イラスト
以上がPHP の単純なファクトリー パターンに関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。