ホームページ  >  記事  >  バックエンド開発  >  PHPファクトリーパターンとは何ですか?なぜphpファクトリーモードを使用するのでしょうか?

PHPファクトリーパターンとは何ですか?なぜphpファクトリーモードを使用するのでしょうか?

黄舟
黄舟オリジナル
2017-11-13 14:04:575529ブラウズ

このタイトルを見て、多くの友人が同じ疑問を持つと思います。PHP には開発中に多くのモードがあります。そこで、まず PHP ファクトリー モードについて理解する必要があります。 . 、なぜ php ファクトリーモードを使用するのでしょうか?

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

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

ファクトリ パターンには、一般原則に従って 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();

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

<?php
interface 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 &#39;bus&#39;:                
        return new Bus();                
        break;            
        case &#39;car&#39;:                
        return new Car();                
        break;            
        case &#39;bike&#39;:                
        return new Bike();                
        break;
        }
    }
}$transport=transFactory::factory(&#39;car&#39;);$transport->go();
ファクトリの静的メソッドをfactory()にする必要がある場合、愚かにもファクトリクラスに再度名前を付けないでください。工場。なぜ?同じ名前の

コンストラクター を忘れないでください~

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

概要:

この記事を読んだ後、皆さんは PHP ファクトリー モデルについて大体理解できたと思います。あなたの仕事に役立つことを願っています。


関連推奨事項:

PHPファクトリーモードの3つの形式のサンプルコードの詳細説明

PHPファクトリーモードの使用例のまとめ

phpファクトリーパターンPHPデザインパターンイテレータパターン

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

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