ホームページ >バックエンド開発 >PHPチュートリアル >PHP で一般的に使用される 5 つのデザイン パターン - ファクトリ パターン

PHP で一般的に使用される 5 つのデザイン パターン - ファクトリ パターン

WBOY
WBOYオリジナル
2016-06-23 13:29:04872ブラウズ

私はいつもデザイン パターンに畏敬の念を抱いてきました。デザイン パターンを見たいと思うたびに、Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides による黒い本「デザイン パターン」を思い出します。その本を読み終えるのにそれほど時間はかかりませんし、プロジェクトの経験がなければ、基本的には単なる机上の空論に過ぎないと個人的に感じます。

今日、IBM Developerworks で PHP で一般的に使用される 5 つのデザイン パターンがリストされている記事を見ました。非常に良いと思います。5 つ、5 つ、5 つ、5 つしかありません (重要な 3 回を強調)。簡単なものから始めて、これら 5 つのタイプを排除しましょう。今後は他のデザインパターンも少しずつ学んでいきたいと思います。

工場パターン

工場という言葉の使い方は非常に鮮やかです。このモードでは、多くの 1 つまたは複数の製品を生産する工場があります (実際には、その状況は 1 つをカバーします)。タイプ)ですが、各製品がどのように製造され、パッケージ化されているかはわかりません。実際、知れば知るほど、将来の行動も混乱するでしょう。雑務が多い、よく言われるのが結合度が高すぎるので工場に任せている、必要なものだけを工場に伝えれば納品してくれるということです。製品のプロセスが変更された場合、その責任は工場にあり、製品を使用するプロセスは影響を受けません。したがって、ファクトリ モードではシステムの結合が大幅に軽減され、システムの安定性が向上し、もちろんコードの再利用率も向上します。

実際のプログラミングでは、ファクトリは外部インターフェイスに相当するため、このインターフェイスの戻り値の型はどのように決定されるのでしょうか。では、このファクトリを使用してさまざまな製品を製造し、顧客に送り返すにはどうすればよいでしょうか。非常に簡単です。すべての製品の「型」を作成するだけです。この「型」には各製品のすべての機能が含まれていますが、これらの機能を実装するには特定の製品が必要であり、これをよくインターフェイスと呼びます。
クラス図を使用して、次のように表します。

PHP の実装
  • インターフェース Product.php を作成する
  • <?php/** * Created by PhpStorm. * User: Defei * Date: 2015/8/8 * Time: 16:14 */interface Product{    public function getName();}
  • Product インターフェースを実装するために製品 A を設計する
  • <?php /** * Created by PhpStorm. * User: Defei * Date: 2015/8/8 * Time: 16:16 */ class ProductA implements Product{ public function getName(){ // TODO: Implement getName() method. echo '我是产品A'; } }
  • Product インターフェースを実装するために製品 B を設計する
  • <?php /** * Created by PhpStorm. * User: Defei * Date: 2015/8/8 * Time: 16:17 */ class ProductB implements Product{ public function getName(){ // TODO: Implement getName() method. echo '我是产品B'; } }
  • ビルド製品 A と B を生産する工場
  • テスト

    製品 A と B が設計され、工場が建設されました。次のステップは、この工場の生産能力をテストすることです。

    <?php/** * Created by PhpStorm. * User: Defei * Date: 2015/8/8 * Time: 16:18 */class ProductFactory{    /** * @param $product_name * @return mixed */    public function factory($product_name){        return new $product_name; //PHP可以使用名字直接new一个同名的对象这个很方便    }}

    出力結果は以下の通りです:

    著作権表示: この記事はブロガーによるオリジナル記事であり、ブロガーの許可なしに転載することはできません。

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