ホームページ バックエンド開発 PHPチュートリアル PHPパターン設計ファクトリーパターン

PHPパターン設計ファクトリーパターン

Jun 23, 2016 pm 01:27 PM

以前の PHP モード設計のシングルトン モードを引き継ぎます (あまり関係がないようですが)。今日は、基本的なパターン設計の 2 つ目であるファクトリー パターンについて説明します。

それでは、ファクトリーモードとは何ですか?

名前から判断すると、何の手がかりもなさそうです。ファクトリーモード、生産​​に関連していますか?それとも製造過程に関係があるのでしょうか?それは工場のリーダーと関係があるのでしょうか?それはリーダー秘書と関係がありますか?長官…わかりました、あまり近づかないようにしましょう。いわゆる工場モデルは実際には生産に関連しています。何を生産するか?生成されるのは、インスタンス オブジェクトです。製造にはどのような設備が使用されますか? ファクトリークラスを介して生成されます。どうやって生産するのでしょうか? ファクトリ クラスは、独自の静的メソッドを呼び出してオブジェクト インスタンスを生成します

ファクトリ パターンには、一般原則に従って Factory という名前の静的メソッドであるキー構成があります。ただし、これは単なる原則であり、ファクトリ メソッドには任意の名前を付けることができますが、この静的メソッドは任意のパラメータを受け入れることもできます。データであり、オブジェクトを返す必要があります。

なぜファクトリーモードを使用するのですか?

ファクトリ パターンに触れたことのない多くの人は、なぜオブジェクトを作成するためにファクトリ クラスを構築するのにこれほど多くの労力を費やさなければならないのかと尋ねずにはいられません。メンテナンスの容易さや拡張性などを適用する代わりに、このような単純な問題を考慮することができます。プロジェクト内の場合は、クラスを通じてオブジェクトを作成します。ほぼ完成している、または完成していて関数を拡張する必要がある場合、元のクラス名があまり適切ではないことが判明したり、関数拡張を実現するにはクラスにコンストラクター パラメーターを追加する必要があることがわかります。なんてことだ!このクラスを通じて多数のオブジェクト インスタンスを作成しましたが、それらを 1 つずつ変更する必要がありますか?今になって初めて「高凝集性・低結合性」の広さと深さを感じます。問題ありません。ファクトリ メソッドでこの問題は解決できます。

もう一度考えてみてください。データベースに接続したいのですが、php、mysql 拡張機能、mysqli 拡張機能、PDO 拡張機能など、いくつかのメソッドがあります。将来の操作のためにオブジェクトが必要なだけです。どれが必要かは状況によって異なります。全員がデータベースに接続しているため、接続の確立、クエリ、切断などの同じ機能が必要です (インターフェイスの重要性はここで示されています)。全体として、これらの方法は「統一され、外部の世界に対して統一される」必要があります。これを達成するにはどうすればよいでしょうか?工場出荷時のパターンを活用してください。

ファクトリーパターンを実装するにはどうすればよいですか?

シングルトンモードと比較して、上記、ファクトリクラス、ファクトリクラスの静的メソッドで十分な情報を提供しました。静的メソッドで作成する必要があるオブジェクト インスタンスを新規作成するだけです。もちろん、上記の 2 番目の質問については、ファクトリ クラスの静的メソッドのパラメータに基づいて単純に判断できます。 if..else.. を使用するか switch..case.. を使用するかに関係なく、作成するクラスを決定する作業を迅速かつ効率的に完了できると便利です。最後に、ファクトリ クラスの静的メソッドはオブジェクトを返すことを忘れないでください。 2つどころか3つもありません。

基本的なファクトリ クラス :

//要创建对象实例的类class MyObject{  } //工厂类class MyFactory{public static function factory(){return new MyObject():   }}  $instance=MyFactory::factory();
ログイン後にコピー

もう少し複雑なファクトリ パターン:

<?phpinterface Transport{    public function go();}class Bus implements Transport{    public function go(){        echo "bus每一站都要停";    }}class Car implements Transport{    public function go(){        echo "car跑的飞快";    }}class Bike implements Transport{    public function go(){        echo "bike比较慢";    }}class transFactory{    public static function factory($transport)    {                switch ($transport) {            case 'bus':                return new Bus();                break;            case 'car':                return new Car();                break;            case 'bike':                return new Bike();                break;        }    }}$transport=transFactory::factory('car');$transport->go();
ログイン後にコピー

ファクトリの静的メソッドを Factory() にする必要がある場合、愚かにもファクトリ クラスに再度名前を付けないでください。工場。なぜ?同じ名前のコンストラクターを忘れないでください~

最後に、多くの初心者は他の人よりも野心的です。彼らは、if..else..、セッション、クッキーを学んだばかりです。より高度なものにする必要があります。人々と話していると、拡張性や保守性などについてよく話されます。たとえば、あなたはしばらく言葉を失うでしょう。コードを書いているときも、人から学んでいるときも、自分は常に「大勢の中で他者を探す」段階にいると感じることがあります。一生懸命勉強した後、ふと振り返ると、「あの人は薄暗いところにいる」と気づきます。 」と叫び、「この人は...「そうだったことが判明しました」。

私がパターンデザインの方法を知っていることはあえて認めませんが、私は自分の学習プロセスを記録するためにブログを共有したいと思っています。それが他の人を助けることができれば、それはさらに良いです~~~

シリーズ記事:

phpパターン設計のシングルトンパターン

phpパターン設計のファクトリーパターン

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles