PHP の抽象ファクトリー パターンについて話しましょう
この記事では、PHP デザイン パターンの抽象ファクトリ パターンについて説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
ファクトリー パターン シリーズのハイライトは、そう、噂の Abstract Factory Pattern です。初めてその名前を聞いたときはどう思いましたか?とにかく、これは「抽象的」という言葉が入っているので、非常に高級なものでなければならないと感じています。この2つの言葉は開発において非常に高度な感覚を持っていると言われており、abstractという言葉と一緒に使うとすべてが非常に強力であるように見えます。ただし、Abstract Factory はまさにファクトリー パターンの兄貴分であると言えます。
Gof クラス図と説明
実際、ファクトリ メソッド パターンを理解していれば、抽象ファクトリ パターンを理解するのは簡単です。どのように言って?サブクラスに対する遅延は同じであり、指定されたオブジェクトの戻りも同じです。ただ、抽象ファクトリは 1 つのオブジェクトを返すだけでなく、多数のオブジェクトを返します。
GoF 定義: 特定のクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供します。
GoF クラス図:
- 左側には 2 つのファクトリー 1 と 2 があります。両方とも抽象ファクトリを継承し、CreateProductA メソッドと CreateProductB メソッドを実装します。
- ファクトリ 1 は ProductA1 と ProductB1 を生成します
- 同様に、ファクトリ 2 は ProductA2 と ProductB2
コードの実装
// 商品A抽象接口 interface AbstractProductA { public function show(): void; } // 商品A1实现 class ProductA1 implements AbstractProductA { public function show(): void { echo 'ProductA1 is Show!' . PHP_EOL; } } // 商品A2实现 class ProductA2 implements AbstractProductA { public function show(): void { echo 'ProductA2 is Show!' . PHP_EOL; } } // 商品B抽象接口 interface AbstractProductB { public function show(): void; } // 商品B1实现 class ProductB1 implements AbstractProductB { public function show(): void { echo 'ProductB1 is Show!' . PHP_EOL; } } // 商品B2实现 class ProductB2 implements AbstractProductB { public function show(): void { echo 'ProductB2 is Show!' . PHP_EOL; } }
プロダクトの実装、いろいろありますが、今回は実際にはA1、A2、B1、B2という4つのプロダクトがあり、それらの間に次のような関係があるとします、A1と B1 は同様の関連製品、B1 と B2 は同様の関連製品です
// 抽象工厂接口 interface AbstractFactory { // 创建商品A public function CreateProductA(): AbstractProductA; // 创建商品B public function CreateProductB(): AbstractProductB; } // 工厂1,实现商品A1和商品B1 class ConcreteFactory1 implements AbstractFactory { public function CreateProductA(): AbstractProductA { return new ProductA1(); } public function CreateProductB(): AbstractProductB { return new ProductB1(); } } // 工厂2,实现商品A2和商品B2 class ConcreteFactory2 implements AbstractFactory { public function CreateProductA(): AbstractProductA { return new ProductA2(); } public function CreateProductB(): AbstractProductB { return new ProductB2(); } }
そして、私たちの工場は工場 1 と工場 2 でもあり、工場 1 は 2 つの関連製品、A1 と B1 を生産しています。リンクされた製品については、工場 2 が生産していますA2 と B2 の 2 つの製品。さて、ここではまだ少し抽象的であり、なぜこれが当てはまるのかまだ理解できないかもしれませんが、引き続き携帯電話の製造を例に挙げてみましょう。
弊社の携帯電話ブランドが人気になってきたので、携帯電話フィルムや携帯電話ケースなどの周辺製品をアブストラクトファクトリーさんに引き渡してお手伝いさせていただくことになりました。前回もお話しましたが、すでに数種類の携帯電話を所有しているので、前回と同様に説明していきますが、衡陽工場(Factory1)では、携帯電話モデル1001(ProductA1)を生産し、同時に携帯電話フィルム(ProductB1)とモデル 1001 携帯電話の携帯電話ケース (製品 B1)、製品 C1) も衡陽工場で生産されています。携帯電話モデル 1002 (ProductA2) はまだ鄭州工場 (Factory2) にあり、このモデルの携帯電話フィルム (ProductB2) と携帯電話フィルム (ProductC2) は鄭州工場 (Factory2) に残されます。それで、本社工場に発注したところ、携帯電話製品一式を別の工場に生産してもらい、直接販売できるようになりました。 !
完全なコード: Abstract Factory Pattern
https://github.com/zhangyue0503/designpatterns-php/blob/master/03.abstract-factory/source/ abstract-factory.php
例
まだ少しめまいがありますか?実際、簡単に言えば、ファクトリ クラスのさまざまなメソッドを通じてさまざまなオブジェクトを返すだけです。もう一度テキストメッセージの例を使って説明しましょう。
シナリオ: 今回は、テキスト メッセージを送信するだけでなく、プッシュ メッセージも同時に送信するというビジネス ニーズがあります。テキスト メッセージの目的は、参加できる新しいアクティビティがあることをユーザーに通知することですが、プッシュ通知はユーザーに新しいアクティビティを通知するだけでなく、直接クリックして赤い封筒を受け取ることもできます。幸いなことに、以前に選択したクラウド サービス プロバイダーはすべて SMS インターフェイスとプッシュ インターフェイスの両方を備えているため、抽象ファクトリーを使用して実装するだけです。
SMS 送信クラス図
<?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; } } interface Push { public function send(string $msg); } class AliYunPush implements Push{ public function send(string $msg){ // 调用接口,发送客户端推送 // xxxxx return '阿里云Android&iOS推送发送成功!推送内容:' . $msg; } } class BaiduYunPush implements Push{ public function send(string $msg){ // 调用接口,发送客户端推送 // xxxxx return '百度Android&iOS云推送发送成功!推送内容:' . $msg; } } class JiguangPush implements Push{ public function send(string $msg){ // 调用接口,发送客户端推送 // xxxxx return '极光推送发送成功!推送内容:' . $msg; } } interface MessageFactory{ public function createMessage(); public function createPush(); } class AliYunFactory implements MessageFactory{ public function createMessage(){ return new AliYunMessage(); } public function createPush(){ return new AliYunPush(); } } class BaiduYunFactory implements MessageFactory{ public function createMessage(){ return new BaiduYunMessage(); } public function createPush(){ return new BaiduYunPush(); } } class JiguangFactory implements MessageFactory{ public function createMessage(){ return new JiguangMessage(); } public function createPush(){ return new JiguangPush(); } } // 当前业务需要使用阿里云 $factory = new AliYunFactory(); // $factory = new BaiduYunFactory(); // $factory = new JiguangFactory(); $message = $factory->createMessage(); $push = $factory->createPush(); echo $message->send('您已经很久没有登录过系统了,记得回来哦!'); echo $push->send('您有新的红包已到帐,请查收!');
完全なソース コード: SMS 送信ファクトリ メソッド
https : //github.com/zhangyue0503/designpatterns-php/blob/master/03.abstract-factory/source/abstract-factory-message-push.php
説明
- とても分かりやすいでしょうか?
- はい、2 つの製品があり、1 つは Message で、もう 1 つは Push で、それぞれメッセージの送信とプッシュ メッセージの送信に使用されます。
- 抽象ファクトリーでは、インターフェイス実装者が 2 つの実装を行うだけで済みます。メソッドは、テキスト メッセージの送信とプッシュ メッセージの送信のオブジェクトを返します。
- テキスト メッセージのみを送信し、プッシュ メッセージは送信しないと言えますか?もちろん可能ですが、createPush() メソッドを呼び出さないでください。
- 抽象ファクトリはどのようなシナリオに最適ですか?明らかに、一連の関連オブジェクトの作成です。
- ファクトリ メソッド パターンは抽象ファクトリの中核であり、製品の完全なセット (製品を含む) を生産するために大規模なファクトリに複数のファクトリ メソッドが配置されることに相当します。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHP の抽象ファクトリー パターンについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
