PHPのシングルトンモードとファクトリーモードの使い方を詳しく解説

小云云
リリース: 2023-03-22 19:14:02
オリジナル
1257 人が閲覧しました

デザイン パターンは、分類されカタログ化された一連のコード設計エクスペリエンスであり、繰り返し使用され、ほとんどの人に知られています。デザイン パターンを使用する目的は、コードを再利用し、コードを他の人が理解しやすくし、コードの信頼性を確保することです。
デザイン パターンが自分自身、他者、そしてシステムにとって Win-Win であることは疑いの余地がありません。デザイン パターンはコーディングを真のエンジニアリングにします。デザイン パターンは、建物の構造と同じように、ソフトウェア エンジニアリングの基礎となります。
シングルトン パターン
シングルトン パターンは、オブジェクトのインスタンスが 1 つだけ存在できるようにする必要がある場合に非常に便利です。オブジェクト作成の制御を単一ポイントに委任し、アプリケーション内には常に 1 つのインスタンスのみが存在します。シングルトン クラスはクラスの外でインスタンス化しないでください。シングルトン クラスには次の要素が必要です。
クラスが任意にインスタンス化されるのを効果的に防ぐには、プライベート アクセス レベルのコンストラクターが必要です。
クラスのインスタンスを保持する静的変数が必要です。
このインスタンスにアクセスするには、通常 GetInstance() という名前のパブリック静的メソッドが必要です。
インスタンスが複製されないようにするには、プライベートで空の clone メソッドが必要です。
以下は、説明するための単純なシングルトン クラスの例です

  1. classClassName
    {
    publicstatic $_instance;
    privatefunction construct()
    {
    # code...
    }
    privatefunction clone()
    {
    # empty
    }
    publicstaticfunctionGetInstance()
    {
    if(!(self::$_instance instanceofself))
    {
    self::$_instance =newself();
    }
    returnself::$_instance;
    }
    publicfunctionSayHi()
    {
            echo "Hi boy!";
    }
    }
    $App=ClassName::GetInstance();
    $App->SayHi();
    /**
     *
     * Output
     *
     * Hi boy!
     *
     */
    ログイン後にコピー

単純なファクトリ パターン
同じインターフェイスを実装するクラスが多数ある場合は、適切なタイミングで適切なクラスをインスタンス化します。これらの New はプロジェクトの隅々に分散されており、ビジネス ロジックが混乱するだけでなく、プロジェクトの保守も困難になります。このとき、ファクトリーモードの概念を導入すると、この問題はうまく解決できます。アプリケーション構成を通じて、またはパラメータを指定することによって、ファクトリ クラスが適切なインスタンスを返すようにすることもできます。
Factory クラスは、クラスをインスタンス化する処理を各ファクトリ クラスに組み込むもので、特に他のクラスのオブジェクトを作成するために使用されます。ファクトリ パターンはインターフェイスと組み合わせて使用​​されることが多いため、ファクトリが特定のインターフェイスをサポートするクラスを返す限り、アプリケーションはインスタンス化されたクラスの詳細を知る必要がなく、便利に使用できます。以下は、ファクトリ クラスの使用法を示す簡単な例です。

  1. interfaceProductInterface
    {
    publicfunction showProductInfo();
    }
    classProductAimplementsProductInterface
    {
    function showProductInfo()
    {
            echo 'This is product A.';
    }
    }
    classProductBimplementsProductInterface
    {
    function showProductInfo()
    {
            echo 'This is product B.';
    }
    }
    classProductFactory
    {
    publicstaticfunction factory($ProductType)
    {
            $ProductType ='Product'. strtoupper($ProductType);
    if(class_exists($ProductType))
    {
    returnnew $ProductType();
    }
    else
    {
    thrownewException("Error Processing Request",1);
    }
    }
    }
    //这里需要一个产品型号为 A 的对象
    $x =ProductFactory::factory('A');
    $x -> showProductInfo();
    //这里需要一个产品型号为 B 的对象
    $o =ProductFactory::factory('B');
    $o -> showProductInfo();
    //都可以调用showProductInfo方法,因为都实现了接口 ProductInterface.
    ログイン後にコピー

概要
パターンは、建物の設計図と同様に、ここではシングルトン パターンとエンジニアリング パターンの 2 つのパターンが公開されています。シングルトン クラスには、それ自体のインスタンスを格納する静的変数があり、この静的変数を取得するための静的メソッドが提供されます。シングルトン クラスは、インスタンスの一意性が侵害されるのを防ぐために、コンストラクターとクローン関数をプライベートとしてマークする必要もあります。ファクトリ パターンは、渡されたパラメータまたはプログラムの構成に基づいてさまざまな型のインスタンスを作成します。ファクトリ クラスは、ポリモーフィック プログラミングの実践において重要です。

以上がPHPのシングルトンモードとファクトリーモードの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート