ホームページ >バックエンド開発 >PHPチュートリアル >PHPシングルトンモードとファクトリーモードの使い方を詳しく解説

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

小云云
小云云オリジナル
2018-03-29 10:32:411339ブラウズ

デザイン パターンは、分類されカタログ化された一連のコード設計エクスペリエンスであり、繰り返し使用され、ほとんどの人に知られています。デザイン パターンを使用する目的は、コードを再利用し、コードを他の人が理解しやすくし、コードの信頼性を確保することです。 デザイン パターンは、私たち自身、他者、そしてシステムにとって Win-Win であることに疑いの余地はありません。デザイン パターンは、建物の構造と同じように、ソフトウェア エンジニアリングの基礎となるものです。

シングルトン パターン
シングルトン パターンは、オブジェクトのインスタンスが 1 つだけ存在できるようにする必要がある場合に非常に便利です。オブジェクト作成の制御を単一ポイントに委任し、アプリケーション内には常に 1 つのインスタンスのみが存在します。シングルトン クラスはクラスの外でインスタンス化しないでください。シングルトン クラスには次の要素が必要です。
クラスが自由にインスタンス化されるのを効果的に防ぐには、プライベート アクセス レベルのコンストラクターが必要です。
クラスのインスタンスを保持する静的変数が必要です。
このインスタンスにアクセスするには、通常 GetInstance() という名前のパブリック静的メソッドが必要です。
インスタンスが複製されないようにするには、プライベートで空の clone メソッドが必要です。
以下は、説明するための単純なシングルトン クラスの例です

class ClassName
{
    public static $_instance;
    private function construct()
    {
        # code...
    }
   private function clone()
    {
        # empty
    }
    public static function GetInstance()
    {
        if(!(self::$_instance instanceof self))
        {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    public function SayHi()
    {
        echo "Hi boy!";
    }
}
$App= ClassName::GetInstance();
$App->SayHi();
/**
 *
 * Output
 *
 * Hi boy!
 *
 */

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

  1. interface ProductInterface
    {
        public function showProductInfo();
    }
    class ProductA implements ProductInterface
    {
        function showProductInfo()
        {
            echo 'This is product A.';
        }
    }
    class ProductB implements ProductInterface
    {
        function showProductInfo()
        {
            echo 'This is product B.';
        }
    }
    class ProductFactory
    {
        public static function factory($ProductType)
        {       
            $ProductType = 'Product' . strtoupper($ProductType);
            if(class_exists($ProductType))
            {
                return new $ProductType();
            }
            else
            {
                throw new Exception("Error Processing Request", 1);
            }
        }
    }
    //这里需要一个产品型号为 A 的对象
    $x = ProductFactory::factory('A');
    $x -> showProductInfo();
    //这里需要一个产品型号为 B 的对象
    $o = ProductFactory::factory('B');
    $o -> showProductInfo();
    //都可以调用showProductInfo方法,因为都实现了接口 ProductInterface.

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

関連する推奨事項:

PHP シングルトン モードの詳細な説明

PHP シングルトン モードの利点の分析

PHP シングルトン モードの簡単な使用方法の共有

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

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