Tutorial Design Pattern : Penerapan Design Pattern Observer di PHP

Perkuliahan semester genap sudah dimulai dari kemarin dan saat itu pula tugas kuliah diberikan. Yaw, nasib jadi mahasiswa cuma bisa pasrah dan mengerjakan tugas yang diberikan. Nah, kebetulan tugas yang diberikan lumayan asik + sesuai sama hobi saya. Mata kuliahnya tentang design pattern dan tugasnya dikumpulkan via blog, artinya design pattern yang sampai saat ini berjumlah 25 ditulis penjelasannya di blog. Mirip-mirip seperti membuat sebuah tutorial lah. Yuppzzz, saya semakin sadar kenapa kita harus punya blog, apalagi sebagai “makhluk-makhluk” IT. Di postingan kali ini saya akan membahas tentang design pattern Observer (hasil semedi semalem). Design pattern ini mempunyai konsep kerja update simultan, dimana ketika suatu object mengalami perubahan (update,insert,delete) maka hasilnya akan ditampilkan ke class-class (pengamat) yang memanfaatkan object tersebut. Dan class-class (pengamat) bebas menggunakan hasil tersebut tanpa perlu laporan ke object. Contohnya seperti notifikasi sms, notifikasi email bahkan notifikasi di Facebook. “Masih bingung…???”, kita langsung aja ke contoh penerapannya.

Studi kasusnya saya mengambil contoh pada aplikasi chatting, dimana user bisa ikut bergabung dan menerima pesan-pesan yang dikirimkan oleh ser lainnya. Kita memerlukan 2 buah interface, dimana kedua interface ini akan dipantau oleh class-class yang memanfaatkannya. function onChanged() pada interface ObserverSender berfungsi untuk mengirim nama user yang ingin bergabung. Dan function tambah_user() pada interface ObservableSubject berfungsi untuk menambahkan nama user yang telah dikirimkan.

<?php
interface ObserverSender
{
	function onChanged( $sender, $nama );
}

interface ObservableSubject
{
	function tambah_user($observer );
}
?>

Sekarang kita buat  buah class yang akan mengimplementasikan kedua interface di atas. Class DaftarChat dan class LogChat, yang filenya saya pisah saja agar mudah maintenancenya ;).

DaftarChat.php

<?php
class DaftarChat implements ObservableSubject
{
	private $daftar_user = array();

	public function tambah_user( $user )
	{
		$this->daftar_user[]= $user;
	}

    public function tambah_log_user($name)
	{
		foreach( $this->daftar_user as $user )
		{
			$user->onChanged( $this, $name );
		}
	}
}
?>

LogChat.php

<?php
class LogChat implements ObserverSender
{
	public function onChanged( $sender, $nama )
	{
		echo( "<b>".$nama."</b> masuk ke room chat<br>" );
	}
}
?>

Ketika ada user baru yang terdaftar, maka pertama-tama user didaftarkan ke dalam sebuah array. Kemudian array tersebut ditampilkan ke dalam sebuah log chat dari class LogChat.

Setelah itu, kita jalankan dalam sebuah file baru dengan memanggil interface dan kedua class di atas terlebih dahulu.

<?php
include('interface.php');
include('DaftarChat.php');
include('LogChat.php');

$ul = new DaftarChat();
$ul->tambah_user(new LogChat());
$ul->tambah_log_user( "Gede" );
$ul->tambah_log_user( "Lumbung" );
$ul->tambah_log_user( "Suma" );
$ul->tambah_log_user( "Wijaya" );

?>

Contoh di atas masih bisa ditambahkan fungsi untuk berhenti atau keluar dari room chat. Mirip dengan fungsi berhenti berlangganan yan sering kita lihat di Facebook. OK deh, sekian dulu postingan tentang design pattern Observer kali ini. Postingan selanjutnya masih akan membahas tentang design pattern yang lainnya :).

Happy Blogging and Keep Coding

Cheerrrss….!!!!

1 Comment

  1. Nopik Gagah Reply

    Bli, Request Aplikasi Koperasi dong yang php ato CI, email ane ya bli. thx