Tutorial Design Pattern : Penerapan Design Pattern Builder di PHP

Hari minggu datang lagi, tidak ada rencana untuk nangkring dimanapun. Cukuplah di rumah saja dengan koneksi yang pas-pas’an sambil menyelesaikan beberapa pekerjaan yang masih antri untuk di-action. Iseng-iseng saya baca koran radar banyuwangi terbitan kemarin, di halaman pertama bagian bawah nangkringlah berita tentang pelantikan ketua kampus yang baru. Yaw wajarlah acara pergantian pemimpin instansi seperti di kampus saya diekspos oleh media, hanya saja menurut saya beritanya terlalu didramatisir. Berbanding 11:12 lah dengan sinetron yang sering tayang di TV. Inti dari berita yang saya baca ini adalah ketua yang baru ingin mendistribusikan software gratis untuk  toko dan sekolah. Yupppzzzz, kita akan bergulat dengan proyek 2M (Makasih Mas) lagi yang sudah sering saya garap. Saya cuma bisa geleng-geleng kepala (-_-‘!) + ketawa, gak dipikir kali yaw siapa yang mau mengerjakan proyek 2M seperti itu. Apakah saya…??? Teman-teman saya yang lainnya….??? Mahasiswa yang lainnya (yang ini kayaknya gak mungkin)…??? Atau dosen-dosen (yang ini kayaknya juga gak mungkin, nyetor jurnal di kampus aja masih susahnya minta ampun kok)….??? Yaw kita liat aja, bagaimana perkembangan proyek 2M yang akan dicanangkan sampai 4 tahun ke depan, mudah-mudahan ada korban lagi dari proyek 2M ini, agar saya tidak sendirian merasakannya ;).

Siang ini saya akan membahas tentang design pattern Builder. Design pattern yang satu ini berfungsi untuk memisahkan pembangunan object yang rumit dari representasinya sehingga dengan proses konstruksi yang sama dapat menghasilkan representasi yang berbeda. Contohnya seperti ketika kita datang ke sebuah bazzar makanan, dimana kita membawa kupon yang sudah disediakan beberapa paket makanan yang disediakan. Ada beberapa tahapan yang harus dilewati untuk mendapatkan sebuah pesanan yang siap untuk disajikan :

  1. Tampilkan pesanan
  2. Tampilkan makanan
  3. Tampilkan minuman
  4. Tampilkan buah
  5. Atur tampilan

Jika ada yang memesan paket makanan yang lain, sebenarnya proses yang dilewati sama saja. Ketika pesanan masuk ke dapur yang dikepalai oleh kepala dapur, masing-masing kru  yang menangani makanan, minuman dan buah menyiapkan hal-hal tersebut. Kemudian penempatannya di dalam kotak di atur sesuai format yang sudah disepakati. Jadi, apapun paket makanan yang dipesan akan melewati proses yang sama. Sekarang kita akan coba untuk menerapkannya di PHP.

<?php

abstract class Pesan_Paket {
    abstract function ambil_pesanan();
}

abstract class Antrian_Pesanan {
    abstract function __construct(Pesan_Paket $pesan);
    abstract function buat_pesanan();
    abstract function ambil_pesanan();
}

class Prosedur_Kerja {
    private $pesanan = NULL;
    private $makanan = NULL;
    private $minuman = NULL;
    private $buah = NULL;
    function tampil_pesanan() {
      return $this->pesanan;
    }
    function tampil_makanan($in_makanan) {
      $this->makanan = $in_makanan;
    }
    function tampil_minuman($in_minuman) {
      $this->minuman = $in_minuman;
    }
    function tampil_buah($in_buah) {
      $this->buah .= $in_buah;
    }
    function atur_tampilan() {
       $this->pesanan .= '<h2>Makanan : '.$this->makanan.'</h2>';
       $this->pesanan .= '<h3>Minuman : '.$this->minuman.'</h3>';
       $this->pesanan .= '<h4>Buah : '.$this->buah.'</h4>';
    }
}

class Buat_Pesanan extends Pesan_Paket {
    private $pesanan = NULL;
    function __construct() {
      $this->pesanan = new Prosedur_Kerja();
    }
    function tampil_makanan($in_makanan) {
      $this->pesanan->tampil_makanan($in_makanan);
    }
    function tampil_minuman($in_minuman) {
      $this->pesanan->tampil_minuman($in_minuman);
    }
    function tampil_buah($in_buah) {
      $this->pesanan->tampil_buah($in_buah);
    }
    function atur_tampilan() {
      $this->pesanan->atur_tampilan();
    }
    function ambil_pesanan() {
      return $this->pesanan;
    }
}

class Prosedur_Pesanan extends Antrian_Pesanan {
    private $pesan = NULL;
    public function __construct(Pesan_Paket $pesan) {
	     $this->pesan = $pesan;
    }
    public function buat_pesanan() {
      $this->pesan->tampil_makanan('Ayam Goreng Lalapan - Nasi Putih');
      $this->pesan->tampil_minuman('Soft Drink');
      $this->pesan->tampil_buah('Jeruk dan Anggur');
      $this->pesan->atur_tampilan();
    }
    public function ambil_pesanan() {
      return $this->pesan->ambil_pesanan();
    }
}

  $buat = new Buat_Pesanan();
  $prosedur = new Prosedur_Pesanan($buat);
  $prosedur->buat_pesanan();
  $pesanan = $prosedur->ambil_pesanan();
  echo $pesanan->tampil_pesanan();

?>

Kepala dapur dan kru saling bekerja sama, dimana pada akhirnya pesana yang siap saji meluncur ke hadapan pemesan. Saya menggunakan contoh paket bazzar di atas karena saya memang familiar dengan sistem kerja dapur bazzar ketika dulu masih aktif di karang taruna. Gara-gara sekarang lagi merantau, gak bisa ikutan jadi kru dapur lagi (aslinya mah biar bisa nyicipin makanan :D). OK deh, sekian dulu postingan saya kali ini dan semoga bermanfaat untuk rekan-rekan.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

1 Comment

  1. Pingback: Tutorial Design Pattern : Penerapan Design Pattern Builder di PHP « rentalps2

Leave a Reply

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