Tutorial Design Pattern : Penerapan Design Pattern Template Method di PHP

Ternyata hari ini tidak ada perkuliahan, padahal sudah saya paksakan untuk bangun pagi. Mata masih ngantuk hasil tidur jam 6 pagi dan saya langsung naik si Jupiter Z kesayangan ke kampus. Tumben parkiran kampus tertata rapi, coba tiap hari seperti ini kan enak dipandang mata. Gak ngawur seperti biasanya, ini sering dilakukan sama karyawan kampus yang ngerasa kampus itu milik mbah moyangnya (kalo si engkong, saya percaya memang dia ‘yang katanya’ mendirikan kampus tempat saya kuliah saat ini, makanya sering ngawur sama mahasiswa). Saya baru tau kalau hari ini ada pelantikan ketua kampus yang baru, yaw saya emang gak mau tau juga. Siapapun ketuanya atau puketnya, juga gak bikin harga beras murah (#lho). Karena udah terlanjur di kampus, saya sempatkan untuk browsing sebentar, berhubung koneksi si pleksi di rumah kurang Jozzz. Nangkring di ruangan baru depan front office, yang katanya sih untuk ruangan istirahat dosen. Kalau boleh usul sih, enaknya itu ruangan dipake kantin, cafe atau sejenisnya lah. Supaya mahasiswa seperti saya ini gak jauh-jauh untuk sekedar beli kopi atau rokok. Kalau misalnya sudah jadi kantin, pasti banyak deh yang memuji bahkan gak tanggung-tanggung si engkong beserta jajarannya akan mengaku-akui kantin tersebut adalah ide brilliant hasil pemikiran mereka. Huffffttt, yaw udahlah, males ngomongin kampus yang ceritanya gitu-gitu doank.

Sore ini saya akan melanjutkan postingan tentang design pattern, kali ini tentang design pattern Template Method. Template method secara kasarnya mendefinisikan sebuah kerangka dari sebuah algoritma di dalam sebuah operasi. Menyediakan sub class untuk class-class yang akan mewarisinya (extends) tanpa mengubah struktur algoritma. Template method ini contohnya seperti sebuah motor, dimana motor mempunyai kerangka yang digunakan sebagai acuan dasarnya (standarisasi). Nah, produsen-produsen motor lainnya mengadopsi standarisasi tersebut, dengan menambahkan beberapa tambahan/perubahan. Dan itu tidak menganggu standarisasi awalnya. Daripada banyak penjelasannya, kita langsung saja menuju ke cara penerapannya di PHP.

Kita siapkan sebuah class abstract, dimana kita tidak bisa membuat object di class ini. Di dalam class ini terdapat beberapa method yang berfungsi untuk menetapkan algoritma umum dan nantinya akan di-extends oleh sub class yang lainnya

abstract class Template_Abstract {

    public final function deskripsi_artikel($in_artikel) {
        $judul = $in_artikel->ambil_judul();
        $kategori = $in_artikel->ambil_kategori();
        $isi = $in_artikel->ambil_isi();

        $in_judul = $this->tampil_judul($judul);
        $in_kategori = $this->tampil_kategori($kategori);
        $in_isi = $this->tampil_isi($isi);

        $tampilkan = $this->format_tampilan($in_judul,$in_kategori,$in_isi);
        return $tampilkan;
    }

    function tampil_judul($judul)
	{
		return NULL;
	}

    function tampil_kategori($kategori) {
        return NULL;
    }

    function tampil_isi($isi) {
        return NULL;
    }

    function format_tampilan($judul_f,$kat_f,$isi_f) {
		return $judul_f .' -|- '.$kat_f.' <br> '.$isi_f;
    }
}

Setelah itu kita buat dua buah sub class yang meng-extends class abstract di atas. Di dalam 2 sub class inilah kita baru bisa membuat object. 2 Sub Class ini ibarat seperti 2 merk sepeda motor, sama-sama mempunyai standarisasi yang sama tetapi terdapat beberapa penambahan aksesoris/style di outputnya.

class Template_Lengkap extends Template_Abstract {
    function tampil_judul($judul) {
      return str_replace(' ','-',$judul);
    }
    function tampil_kategori($kategori) {
      return str_replace(' ','-',$kategori);
    }
    function tampil_isi($isi) {
      return str_replace(' ','-',$isi);
    }
}

class Template_Sederhana extends Template_Abstract {
    function tampil_judul($judul) {
      return str_replace(' ','---',$judul);
    }
    function tampil_kategori($kategori) {
      return str_replace(' ','---',$kategori);
    }
    function tampil_isi($isi) {
      return str_replace(' ','---',$isi);
    }
}

Cara pemakaiannya seperti di bawah ini. Buat sebuah class yang sudah mempunyai standarisasi yang sama dengan class abstract di atas. Setelah itu tinggal memanggil 2 sub class yang sudah meng-extends class abstract untuk menghasilkan output yang sesuai dengan “cetakannya”.

class Artikel {
    private $judul;
    private $kategori;
    private $isi;
    function __construct($in_judul, $in_kategori, $in_isi) {
        $this->judul = $in_judul;
        $this->kategori  = $in_kategori;
        $this->isi  = $in_isi;
    }
    function ambil_judul()
	{
		return $this->judul;
	}
    function ambil_kategori()
	{
		return $this->kategori;
	}
    function ambil_isi()
	{
		return $this->isi;
	}
}

  $artikel = new Artikel('5 Teroris Berhasil Ditembak Mati di Bali','Kriminal', 'Tadi malam, 5 orang yang diduga merupakan teroris berhasil ditembak mati oleh....');

  $lengkap = new Template_Lengkap();
  $sederhana = new Template_Sederhana();

  echo $lengkap->deskripsi_artikel($artikel);
  echo '<br><br>';
  echo $sederhana->deskripsi_artikel($artikel);

Template Method ini banyak digunakan dalam framework, yaitu untuk menyediakan sebuah algoritma umum di super class, dan detail dari algoritma tersebut di implementasikan di sub class. Seperti contoh di atas, urutan dan standarisasinya sama hanya detailnya saja yang berbeda. OK deh, sekian dulu postingan saya kali ini. Mudah-mudahan nanti malam bisa lanjut untuk membahas design pattern lagi.

Happy Blogging and Keep Coding

Cheerrrss….!!!!