Tutorial Design Pattern : Penerapan Design Pattern Command di PHP

Malam ini seperti biasa saya kelayapan untuk mencari sedikit inspirasi, nangkring di ITSolution untuk sekedar nonton TV dan mencari sedikit obrolan dengan teman. Sampailah obrolan saya dengan si Rifky ke permasalahan mantan pacar. Yuppzz…saya lah contoh makhluk jomblo yang gagal move on nan #galau karena masih teringat bayang-bayang mantan. Dan kayaknya si Rifky juga akan menjadi generasi #galau selanjutnya :ngakaks:. Ketika akan pulang, saya mampir ke dagang nasi goreng favorit saya. Lihat yang jual, saya malah ingat sama wajahnya ibu mantan pacar (lebih tepatnya sih mantan calon mertua :p), dan akhirnya tambah #galau. Daripada galau, mending kita lanjutin postingan tentang design pattern, berhubung minggu depan sudah mulai UTS, pasti pak dosen nanya kelanjutan tugasnya. Kali ini saya akan membahas design pattern Command, yang alurnya lumayan sederhana.

Design pattern Command adalah sebuah pola dimana object yang digunakan untuk mewakili maupun merangkum informasi yang diperlukan untuk memanggil metode di waktu yang berbeda. Tiga aturan yang ada dalam design pattern Command yaitu client, invoker, dan reciver. Contoh dari design pattern Command ini ialah pada saklar lampu, dimana satu saklar dapat mewakili 2 perintah (metode) yaitu hidup (on) dan mati (off), yang disini saya buat ke dalam sebuah abstract class SwitchLampu. Ada juga class Lampu yang berfungsi untuk menetapkan informasi lampu dan statusnya (on atau off). Setelah itu ada 2 class yang meng-Extends abstract class SwitchLampu, yaitu HidupkanLampu dan MatikanLampu. Berikut implementasinya ke dalam script PHP :

<?php

class Lampu {
    private $lokasi_lampu;
    private $status;
    function __construct($lokasi_lampu_in, $status_in) {
        $this->aturLampu($lokasi_lampu_in);
        $this->aturStatus($status_in);
    }
    function ambilLampu() {
        return $this->lokasi_lampu;
    }
    function ambilStatus() {
        return $this->status;
    }
    function aturLampu($lokasi_lampu_in) {
        $this->lokasi_lampu = $lokasi_lampu_in;
    }
    function aturStatus($status_in) {
        $this->status = $status_in;
    }
    function nyalakan() {
        $this->aturLampu('Nyalakan '.$this->ambilLampu());
        $this->aturStatus(str_replace('MATI','HIDUP',$this->ambilStatus()));
    }
    function matikan() {
        $this->aturLampu(str_replace('Nyalakan','Matikan',$this->ambilLampu()));
        $this->aturStatus(str_replace('HIDUP','MATI',$this->ambilStatus()));
    }
    function tampilkan() {
        return $this->ambilLampu().' - '.$this->ambilStatus();
    }
}

abstract class SwitchLampu {
    protected $lampu;
    function __construct($lampu_in) {
        $this->lampu = $lampu_in;
    }
    abstract function jalankan();
}

class HidupkanLampu extends SwitchLampu {
    function jalankan() {
        $this->lampu->nyalakan();
    }
}

class MatikanLampu extends SwitchLampu {
    function jalankan() {
        $this->lampu->matikan();
    }
}

class Jalankan{
    function panggil(SwitchLampu $lampu_in) {
        $lampu_in->jalankan();
    }
}

  $jalan = new Jalankan();

  $lampu = new Lampu('Lampu Taman', 'status MATI');
  cetak('Kondisi Awal :');
  cetak($lampu->tampilkan());
  cetak('');

  $lampu_hidup = new HidupkanLampu($lampu);
  $jalan->panggil($lampu_hidup);
  cetak('Ketika dihidupkan :');
  cetak($lampu->tampilkan());
  cetak('');

  $lampu_mati = new MatikanLampu($lampu);
  $jalan->panggil($lampu_mati);
  cetak('Ketika dimatikan :');
  cetak($lampu->tampilkan());
  cetak('');

  function cetak($isi) {
      echo $isi."<br/>";
  }

?>

Di bagian akhir, kita buat sebuah class yang mengimplementasikan abstract function dari class SwitchLampu untuk menjalankan function matikan atau hidupkan dari class Lampu. Kemudian perubahan tersebut ditampilkan dengan memanfaatkan function tampilkan yang juga dimilik oleh class Lampu. Nah…gampang kan penerapannya??? Sampai postingan ini, sudah ada 13 design pattern yang sudah dibahas. Targetnya masih ada sekitar 9 design pattern yang menanti untuk dibahas, supaya tugas mata kuliah ini cepat selesai :). OK deh, sekian dulu postingan saya malam ini. Semoga bisa bermanfaat untuk kita semua.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

2 comments

  1. Andi Saputro Reply

    MAs bagus sekali artikel artikelnya. MAs saya tertarik ma halaman teknik downloadnya minta source nya boleh mas…. hehehe pingin juga pasang seperti itu.

  2. Eko Heri Susanto Reply

    Postingannya udah lumayan banyak ya…berarti bisa dong UTS nanti udah lulus matkul design pattren? hehe