Tutorial Design Pattern : Penerapan Design Pattern Flyweight di PHP

Hari senin datang lagi dan besok sudah hari selasa, dimana mata kuliah machine learning sudah siap membuat saya tidak bisa tidur nyenyak nanti malam. Tugas proyek yang selalu dikejar-kejar dan pasti ditanyakan perkembangannya setiap minggu. Mood saya memang sedang kurang baik untuk mengerjakan tugas tersebut, ditambah karena memang bukan hobi dan minat saya disana. Nah, daripada #galau mikirin si machine learning, mending kita bahas si design pattern yang kebetulan tugasnya masih numpuk dan menunggu untuk di-action. Kebetulan tadi siang ada mata kuliah design pattern dan saya terpaksa bolos :p. Karena siangnya saya harus menggantikan ngoceh di depan kelas sebagai asisten praktikum, berhubung si ibu dosen ada keperluan mendadak. Kali ini design pattern Flyweight yang akan saya bahas, yuppzzz…si “kelas terbang” yang berfungsi untuk menghemat penggunaan memori. Kalau dilihat-lihat, fungsinya hampir sama dengan design pattern yang lainnya, tidak lain dan tidak bukan untuk memangkas si memori supaya tidak membengkak.

Flyweight ini saya contohkan seperti racikan kopi, dimana secara baku terdiri dari 2 bahan yaitu campuran kopi dan campuran gula. Kemudian diturunkan lagi, ada jenis kopi capucinno, kopi luak, kopi hitam, dan kopi-kopi yang lainnya. Bahan dasarnya sudah baku, yaitu kopi dan gula, kalau ditambahkan susu krim itu lain cerita :p. Nah, ketika ada sebuah kedai kopi yang khusus hanya menjual berbagai macam jenis kopi ini kita ibaratkan seperti sebuah class Factory, kita beri nama KopiFactory. Kedai kopi ini kemudian membuat berbagai jenis kopi seperti capucinno, kopi luak, kopi hitam dan yang lainnya, dengan tetap mengacu kepada aturan bahan dasar pembuatan kopi, yaitu campuran kopi dan gula. Kemudian ada sebuah pelanggan yang memesan kopi ke kedai (class KopiFactory), disini kita gunakan sebuah class PesanKopi yang berisikan sebuah array untuk menampung semua pesanan pelanggan dan menampilkan isi pesanannya. Sekarang kita coba implementasikan ke dalam sebuah kode PHP, supaya yang paham jadi tambah paham, yang bingung jadi tambah bingung :p.

<?php
class Kopi {
    private $jenis;
    private $jenis_kopi;
    private $jenis_gula;
    function __construct($jenis_in,$jenis_kopi_in, $jenis_gula_in) {
        $this->jenis = $jenis_in;
        $this->jenis_kopi = $jenis_kopi_in;
        $this->jenis_gula  = $jenis_gula_in;
    }
    function isiJenis() {
        return $this->jenis;
    }
    function isiJenisKopi() {
        return $this->jenis_kopi;
    }
    function isiJenisGula() {
        return $this->jenis_gula;
    }
}

class KopiFactory {
    private $kopi = array();
    function __construct() {
        $this->kopi[1] = NULL;
        $this->kopi[2] = NULL;
        $this->kopi[3] = NULL;
    }
    function buatKopi($no) {
        if (NULL == $this->kopi[$no]) {
            $buatKopi = 'campuranKopi'.$no;
            $this->kopi[$no] = $this->$buatKopi();
        }
        return $this->kopi[$no];
    }
    function campuranKopi1() {
        $kopi = new Kopi('Kopi Jenis 1','Kopi Luak','Gula Pasir Biasa');
        return $kopi;
    }
    function campuranKopi2() {
        $kopi = new Kopi('Kopi Jenis 2','Kopi Tubruk','Gula Pasir Halus (Gulaku)');
        return $kopi;
    }
    function campuranKopi3() {
        $kopi = new Kopi('Kopi Jenis 3','Kopi Capucinno','Gula Krim');
        return $kopi;
    }
}

class PesanKopi {
    private $kopi = array();
    function pesan($pesanan) {
        $this->kopi[] = $pesanan;
    }
    function tampilKopi() {
        $hasil = NULL;
        foreach ($this->kopi as $kp) {
            $hasil .= 'Jenis Kopi : <b>'.$kp->isiJenis().'</b>, Bahan Kopi : <b>'.$kp->isiJenisKopi().'</b>, Bahan Gula : <b>'.$kp->isiJenisGula().'</b><br>';
        };
        return $hasil;
    }
}

  $kopi_factory = new KopiFactory();

  echo "Pesanan dari Pelanggan A <br>";
  $pesan_kopi_A =  new PesanKopi();
  $kopi1 = $kopi_factory->buatKopi(1);
  $kopi2 = $kopi_factory->buatKopi(2);
  $pesan_kopi_A->pesan($kopi1);
  $pesan_kopi_A->pesan($kopi2);

  echo $pesan_kopi_A->tampilKopi();

  echo "<br><br>";

  echo "Pesanan dari Pelanggan B <br>";
  $pesan_kopi_B =  new PesanKopi();
  $kopi1 = $kopi_factory->buatKopi(2);
  $kopi2 = $kopi_factory->buatKopi(3);
  $pesan_kopi_B->pesan($kopi1);
  $pesan_kopi_B->pesan($kopi2);

  echo $pesan_kopi_B->tampilKopi();

?>

Dari contoh di atas saya hanya membuat 3 buah function yang mewakili 3 jenis kopi. Ada 2 orang pelanggan yang membeli kopi dengan jenis yang berbeda. Class Kopi cukup hanya dideklarasikan sekali, yang artinya aturan pembuatan kopi cukup ditampilkan sekali saja di papan resep, kemudian yang lain hanya mengikuti aturan tersebut. Gampang kan….??? Sekian dulu postingan saya di edisi mengejar deadline tugas kuliah design pattern ;). Semoga bermanfaat untuk kita semua.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

Leave a Reply

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