Ketika kita membuat sebuah aplikasi, biasanya ada object-object yang kita buat dan digunakan secara bersamaan (sharing) di seluruh aplikasi. Contoh yang paling mudah adalah koneksi ke database. Koneksi database biasanya kita inisaliasi diawal code kita dan di destroy ketika aplikasi kita tutup.

Kita gak mungkin mengcreate tiap object database maka akan boros resource. selama ini yang sering dilakukan adalah

  • Menyimpannya object yang mau di share sebagai object global
  • Menjadikan object tersebut sebagai parameter sebuah object

ada satu cara lagi yitu menggunakan pattern singleton contoh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
abstract class Singleton
{
    static abstract public function getInstance();
    static final protected function getClassInstance($klass, $args=NULL)
    {
      if(self::$instances === NULL)
            self::$instances = array();
 
        if(!array_key_exists($klass, self::$instances))
            self::$instances[$klass] = array();
 
        $key = serialize($args);
 
        // jika gak ada di instann
        if(!array_key_exists($key, self::$instances[$klass]))
        {
                self::$instances[$klass][$key] = new $klass($args);
        }
 
        // Return instance $klass
        return self::$instances[$klass][$key];
    }
    //menyimpan object yang telah diinstant berdasrkan ID
    static private $instances;
}

Kelas diatas merupakan kelas abstract yang berfungsi untuk membuat sebuah klas singleton

contoh penggunaan:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
final class Database extends Singleton
{
    public     $name;
    public   $data;
   static public function getInstance($name = 'Default')
    {
        $args = array('name' => $name);
        return Singleton::getClassInstance(__CLASS__, $args);
    }
 
    protected function __construct($args)
    {
        $this->name = $args['name'];
    }
}
$a = Database:getInstance();
$a->data="ini dari Variabel A";
$b = Database:getInstance('Default');
$c = Database:getInstance('Default2');
$d = Database:getInstance('Default2');
 
$d->data="ini dari Variabel D";
var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);

 

2 Comments

 

  1. June 29, 2010  1:56 pm by Haqqi Reply

    Singleton ini konsep dasarnya seperti apa sih?

    • June 29, 2010  2:24 pm by ibnoe Reply

      Satu instance object pada saat eksekusi.. jadi tidak perlu menggunakan variabel global atau reinstance

Leave a reply

 

Your email address will not be published.