2011/11/23

【システム開発】PHP5でシングルトンパターンの実装する話【PHP】

今回はデザインパターンの勉強をしようということでまずは
「シングルトンパターン」というものです。

前からちょくちょく調べていたので今回はその先駆けということで

シングルトンパターンとは?
シングルトンパターンパターンとはデザインパターンの一つで GoFによって考案されたデザインパターンです。 内容はと言うとクラスのインスタンスをひとつしか生成しないことを保証するということです。
実装するメリットは?
例えばDBのハンドルを使いまわしたりだとか、僕の会社だと決済モジュールは シングルトンパターンで実装されています。 複数インスタンスを生成するべきではないクラスや何度も使いまわすものを このパターンで実装することによりリソースの削減ができます。 すべてのクラスに実装する必要はありませんが、使いまわすことが多いものだと 実装したほうがいい場合が多いです。
どういう風に実装するのか
下記の項目が基本的なシングルトンパターンを実装するのに必要な項目になります。 1.インスタンスを保持する「private」のクラス変数が定義されている 2.コンストラクタが「private」である。 3.インスタンスを返すメソッドがクラスメソッドとして定義されている。
実装方法についての解説
まず、1ですがシングルトンパターンではクラスの内部にインスタンスを保持します。 保持したインスタンスを使いクラス内関数にアクセスします。 次に、2ですがこれは「new」によってインスタンスを生成できないようにする為です。 シングルトンパターンはインスタンスをひとつに保証するものなのでprivateで宣言します。 最後に3ですが、コンストラクタをprivateで実装するため、クラスインスタンスを 生成する関数が必要になります。 3がこれに当たります。
実装例
下記がシングルトンパターンの実装例になります。 Singleton.php
<?php

class Singleton
{
    private static $instance = null;

    private function __construct()
    {
    }

    public static function getInstance()
    {
        if (is_null(self::$instance))
        {
            self::$instance = new self;
        }

        return self::$instance;
    }

    public function test()
    {
        echo "Singleton";
    }

}

?>
呼び出し方法は以下のものが使えます。
$single = Singleton::getInstance();
$single->test();
Singleton::getInstance()->test();
終わり

0 件のコメント:

コメントを投稿