Design Pattern: Singleton

SingletonDesign pattern adalah solusi (best practice) umum untuk masalah yang sering terjadi dalam pengembangan software. Setiap framework dibangun dengan menggunakan konsep-konsep design pattern. Konsep ini semakin berkembang karena konsep Object Oriented Programming (OOP) dan sekaligus OOP semakin berkembang karena adanya design pattern.

Salah satu contoh design pattern adalah “Singleton”, yaitu konsep yang membatasi instance class hanya satu, atau dengan kata lain tidak boleh ada dua object untuk class tersebut. Gambaran mudahnya adalah silahkan dibayangkan bahwa dalam sebuah keluarga yang berperan sebagai suami hanya boleh satu orang, sampai kapan? ya minimal sampai si orang yang berperan sebagai suami ini meninggal dunia atau cerai, maka selama itu tidak boleh ada orang lain yang berhak menggantikannya sebagai suami. Nah konsep monogami ini disebut sebagai singleton.

Karena menganut “monogami” maka singleton juga disebut atau digolongkan sebagai anti pattern. Mengapa kok disebut kek gitu? ya karena bertentangan dengan konsep pattern secara umum yang mana sebuah class dalam konsep OOP harusnya bisa diinstance sebanyak apapun. Namun jangan salah faham karena anti pattern ini juga merupakan salah satu jenis design pattern.. nah bingung kan? jangan bingung, ingat makna dari design pattern diatas yaitu solusi.., sehingga dengan kata lain anti pattern juga merupakan salah satu solusi untuk mengatasi suatu masalah dalam pengembangan software.

Jika design pattern merupakan solusi dalam mengatasi masalah, maka masalah apa sih yang diselesaikan dengan Singleton ini?. Oke saya akan membuat gambaran yang sederhana, pada sebuah aplikasi, programmer menginginkan bahwa user yang login pada satu session browser hanya boleh satu orang user saja. Dengan kata lain seandainya user punya dua akun user maka aplikasi tidak mengizinkan user untuk login menggunakan keduanya sekaligus, misal di tab 1 login sebagai akun A, sedangkan di tab 2 sebagai akun B. Untuk mengimplementasikan hal ini maka kita bisa terapkan kode pada class User atau class yang menangani authentication, yaitu dengan mengecek apakah class user udah di instance (create), jika belum maka di create, dan jika sudah maka pake instance tsb tanpa create baru.

Contoh class pada PHP yang mengimplemetasikan konsep ini kira2 sebagai berikut:

class Singleton
{
    private static $instance;

    public static function getInstance()
    {
        if (null === static::$instance) {
            static::$instance = new static();
        }
        
        return static::$instance;
    }
	
    protected function __construct()
    {
    }

    private function __clone()
    {
    }
}

Kita bisa lihat pada fungsi getInstance ada pengecekan ada nggak static property instance di memory? jika tidak ada maka create baru jika ada maka gunakan yang lama. Adapun fungsi __construct diset sebagai protected adalah untuk mencegah create instance baru menggunakan operator new, demikian juga dengan clone. Intinya memastikan create instance baru menggunakan fungsi getInstance.

$obj = Singleton::getInstance();

Implementasi singleton design patter pada framework Yii bisa kita jumpai pada class model User.

Oke sekian dulu, mudah2an tulisan ini membantu pemahaman anda. silahkan dikoreksi jika ada yang kurang tepat karena sayapun juga masih belajar.

Referensi:

http://www.phptherightway.com/pages/Design-Patterns.html

https://github.com/domnikl/DesignPatternsPHP

Leave a Reply

Your email address will not be published. Required fields are marked *