Tutorial Design Pattern : Penerapan Design Pattern Singleton di PHP

Malam minggu datang lagi dan kembali sebagai seorang jomblo sejati, saya nangkring di ITSolution untuk numpang ngNet + mengerjakan beberapa tugas untuk UTS besok. Ada beberapa fenomena yang terjadi disini, diantaranya teman-teman saya yang mulai mojok dengan pacar atau gebetannya dan beberapa lagi yang sedang dilanda sindrom GALAU 😀 masalah hati. Sindrom GALAU akan skripsi juga menyerang beberapa teman MABA (MAhasiswa BAsi) lainnya. Ngomong-ngomong soal skripsi, saya jadi ingat lagi dengan target skripsi yang ingin saya tempuh tahun depan. Ingat juga dengan sebuah judul skripsi yang terdapat materi design pattern di dalamnya.

“Apaan tuh design pattern..???”. Design Pattern adalah sebuah solusi untuk masalah umum yang sering kita temui dan lakukan, yang membentuk sebuah pola (pattern) tertentu. Sehingga dibutuhkan sebuah desain yang bisa memanajemen pola tersebut, agar kode program lebih mudah dibaca, dipelihara, dan yang paling penting bisa diterapkan dalam sebuah tim kerja dalam skala besar. Dengan design pattern inilah nantinya terbentuk API yang bisa digunakan kembali oleh developer pihak ketiga.

Ada beberapa design pattern yang ada saat ini, diantaranya Singleton, Adapter, Registry, Factory, Observer dan masih banyak yang lainnya. Pada postingan kali ini, saya akan menjelaskan sedikit tentang penerapan design pattern singleton di PHP. Design pattern yang hampir selalu digunakan ini, berfungsi untuk mencegah terjadinya inisialisasi lebih dari satu kali dari sebuah class. Tujuannya untuk memangkas penggunaan memori. Biasanya diterapkan pada koneksi database dan pemanggilan library/plugin yang cukup diinisialisasi sekali saja.

Di atas ini, saya ambil contoh pada studi kasus ketika kita akan menggunakan class Koneksi. Dimana objek Koneksi dibuat sebanyak 3 kali, padahal sebenarnya cukup sekali saja untuk membuat objek Koneksi. Sama-sama menggunakan fungsi mysql_connect() (contohnya pada mysql), yang berbeda hanya perintah query. Otomatis gambar di atas sangat tidak efisien, karena memori harus menampung 3 objek Koneksi yang sama.

Gambar di atas adalah contoh alur program jika menggunakan design pattern singleton. Perintah-perintah query cukup menggunakan 1 objek Koneksi yang sudah diinisialisasi ketika pertama kali class Koneksi diakses. Di bawah ini, saya coba untuk membuat contoh penerapannya pada bahasa pemrograman PHP.

<?php
class Koneksi {
	private $_dbase;
	//menyimpan objek Koneksi
	private static $_instance;
	//menghitung berapa kali objek diakses
	 private  static $_akses_koneksi = 0;

	private function  __construct()
	{
		$this->_dbase = "mysql";
		//ditambahkan 1, setiap kali class objek diakses
		self::$_akses_koneksi +=1;
		echo "<p>Mengakses koneksi sebanyak ".self::$_akses_koneksi." kali</p>";
	}
	public static function cekInstance()
	{
		//jika objek $_instance kosong
		if(is_null(self::$_instance))
		{
			//buat objek baru
			self::$_instance = new self();
        	}
		return self::$_instance;
	}
	public function prosesQuery($query)
	{
		//menampilkan data, melalui objek Koneksi
		echo "
".$query . "

";
	}
}

class AmbilQuery{
	private $_isi_query;
	private $_koneksi;
	public function  __construct($query)
	{
        	$this->_isi_query = $query;
		//mengecek instance dari class Koneksi
		$this->_koneksi = Koneksi::cekInstance();
	}
	public function inQuery()
	{
		$this->_koneksi->prosesQuery($this->_isi_query);
	}
}

//mencoba menampilkan data,
$q1 = new AmbilQuery("select * tbl_produk where kode_produk='C10'");
$q1->inQuery();
$q2 = new AmbilQuery("insert into tbl_produk values ('C14','Pasta Gigi','10000')");
$q2->inQuery();

?>

Dan ketika source code di atas dijalankan, maka akan terlihat counter untuk menghitung berapa kali class Koneksi diakses. Jika berjalan dengan benar, maka akan muncul pesan bahwa koneksi diakses sebanyak 1 kali. “Bagaimana, ruwet kah…???”. Kalau ruwet, artinya rekan-rekan sudah berusaha untuk memahami apa yang saya jelaskan di atas :D. Kalau masih ruwet, silahkan dibaca dan dipahami kembali. OK deh, sekian dulu postingan saya tentang design pattern singleton ini, dan akan saya lanjutkan untuk menerapkan design pattern yang lainnya di postingan selanjutnya.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

11 comments

  1. Pingback: | » Tutorial Design Pattern : Penerapan Design Pattern Registry di PHP | Ng`Blog Biar Gak GobloG – BlogNya Gede Lumbung |

  2. eko heri Reply

    Habis ini ulas juga design pattern “dependency injection” De. dependency injection ini konsepnya lebih bagus dibandingkan dgn factory. Coba aja wis…

  3. ihsan Reply

    ‎​TђƋήK••ƴ<3Ʋ••({})({}) for the info
    Membantu bgt gan…

  4. Banu Handito Reply

    gan ane mau tanya” lebih rinci nie, boleh ga gan minta nomor hp’y?

  5. nurjalih Reply

    asyik design pattern,,,,

    lebih enak dari kue tart nih,,
    hahahahah

    makasih gan

  6. Fachrul Andy Reply

    Makasi mas gede … Saya baru belajar oop nih …

    Bagus .. Penjelesannya easy 🙂 terimakasi.

  7. abbas Reply

    izin dowload dan tks bwt contoh web desain nya bozz, bagus bgd ddh buat pembelajaran dan jga bisa di jadikn bahan tugas gtu, brsyukur bgd dh,, hhee,,,