PHP対象プログラム設計(oop)学習ノート(三)-単例モードと工場モード


間違いなく、デザインモデルは他の人のシステムよりも優れています。設計モードはコードの編成を真に工程化させる。デザインモデルはソフトウェアエンジニアリングの基礎となる脈絡で、ビルの構造のようです。シングルモード
あるオブジェクトが一例しかないことを保証する必要がある場合、単一の例のモードは非常に有用である。作成対象の制御権を単一の点に委託しています。いつでもアプリケーションは一つのインスタンスしか存在しません。単例類はクラスの外部で実施することができるべきではない。一例類は以下のいくつかの要素を備えるべきである。
アクセスレベルがprvateのコンストラクターである必要があり、クラスがランダムに実装されるのを防ぐ効果があります。
保存クラスのインスタンスを持つ静的変数が必要です。
この例にアクセスするための共通の静的方法が必要であり、この方法はしばしば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!
 *
 */

簡易工場モード
同じインターフェースを実現するクラスが大量にある場合、適切な時に適切なクラスを具体化し、これらのnewをプロジェクトの隅々に分散させると、業務ロジックが混乱し、プロジェクトを維持しにくい。この時、工場モデルの概念を導入すれば、この問題をうまく処理することができます。私たちはまた、アプリケーションの構成またはパラメータを提供することによって、工場クラスに適切な例を返してもらえます。
工場類は、実例類のプロセスを各工場類の中に置いて、他の種類のオブジェクトを作成するために専用です。工場のモードはよくインターフェースと一緒に使います。このようにアプリケーションはこれらの実用化されたクラスの具体的な詳細を知る必要がありません。工場が帰ってきたのがあるインターフェースをサポートしている種類だと知っていれば、便利に使えます。以下、簡単な例を挙げて、工場類の使用について説明します。

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.
結び目
モデルはソフトウェアエンジニアリングの基礎となる脈絡がビルの設計図のように、ここで二つのパターンに接触しました。一例クラスには、静的変数が自身の一例を保存しています。この静的変数を取得する静的方法が提供されます。単例クラスはまた、構造関数とclone関数をプライベートとしてマークし、変形例の一意性を防止しなければならない。工場モードは、導入されたパラメータまたはプログラムの構成に基づいて、異なるタイプのインスタンスを作成します。工場類は対象となります。工場類は多形プログラミングの実践において重要です。