Tutorial Design Pattern : Penerapan Design Pattern Strategy di PHP

Malam ini saya nangkring lagi di ITSolution dengan koneksi internetnya yang agak #galau, hampir sama dengan keadaan hati saya yang juga sama-sama #galau. Gara-gara mimpi tadi malam yang berubah jadi kenyataan tadi sore ketika saya akan pulang dari kampus. Dan ternyata benar prediksi saya, si Rifky juga lagi #galau gara-gara mantan :ngakaks:. Walaupun hari ini banyak orang #galau, ternyata kuliah tadi siang tetap berjalan, harga beras tetap mahal dan si engkong tetap ngawur setiap mau parkir mobil di halaman kampus (nah lho..). Mungkin jika saya menjadi presiden nantinya, saya akan membuatkan hari libur nasional dalam rangka menghormati para #galauersSejati. Untuk meredam kegalauan yang tidak produktif, lebih baik kita lanjutkan membahas materi tentang design pattern. Malam ini saya akan membahas tentang design pattern Strategy, yang bisa memberikan alternatif pemilihan algoritma pada saat runtime.

Design pattern Strategy ini memungkinkan algoritma bervariasi secara independen dari klien yang memanfaatkannya. Contoh sederhanya ialah pada sebuah form inputan, dimana ada field yang inputannya harus berupa angka, email dan captcha. Semua inputan tersebut harus di validasi dengan aturan atau algoritma yang berbeda. Dan tidak semua inputan tersebut dikenali sampai proses runtime. Nah, disinilah kita bisa memanfaatkan design pattern Strategy untuk melakukan hal tersebut. Masing-masing class validasi (ValidasiEmail, ValidasiAngka, ValidasiCaptcha) yang mengimplementasikan sebuah interface (ValidasiInterface) dipisahkan sesuai kegunaannya, kemudian dipanggil melalui class validasi yang di dalamnya terdapat selection switch. Kemudian pada sebuah class InputForm, value yang akan diproses diisi terlebih dahulu. Untuk implementasinya pada php, sudah saya sediakan di bawah ini :

<?php

interface ValidasiInterface {
    public function tampil($isi_in);
}

class ValidasiEmail implements ValidasiInterface {
    public function tampil($isi_in) {
        $input = $isi_in->ambilInput();
        return str_replace("|","@",$input);
    }
}

class ValidasiAngka implements ValidasiInterface {
    public function tampil($isi_in) {
        $input = $isi_in->ambilInput();
        return str_replace("123456","angka",$input);
    }
}

class ValidasiCaptcha implements ValidasiInterface {
    public function tampil($isi_in) {
        $input = $isi_in->ambilInput();
        return str_replace("captcha","b322jbg",$input);
    }
}

class Validasi {
    private $validasi = NULL;
    public function __construct($validasi_in) {
        switch ($validasi_in) {
            case "email":
                $this->validasi = new ValidasiEmail();
            break;
            case "angka":
                $this->validasi = new ValidasiAngka();
            break;
            case "captcha":
                $this->validasi = new ValidasiCaptcha();
            break;
        }
    }
    public function tampilkanValidasi($isi) {
      return $this->validasi->tampil($isi);
    }
}

class InputForm {
    private $input;
    function __construct($input_in) {
        $this->input = $input_in;
    }
    function ambilInput() {
        return $this->input;
    }
}

  $input = new InputForm('123456|captcha.com');

  $val_email = new Validasi('email');
  $val_angka = new Validasi('angka');
  $val_captcha = new Validasi('captcha');

  cetak('Data Awal :');
  cetak($input->ambilInput());
  cetak('');

  cetak('Validasi Email :');
  cetak($val_email->tampilkanValidasi($input));
  cetak('');

  cetak('Validasi Angka');
  cetak($val_angka->tampilkanValidasi($input));
  cetak('');

  cetak('Validasi Captcha :');
  cetak($val_captcha->tampilkanValidasi($input));
  cetak('');

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

?>

Contoh lain dari design pattern strategy ini ialah pada studi kasus transportasi ke bandara, dimana kita bisa menggunakan berbagai jenis transportasi seperti mobil, sepeda motor, bus, bemo, becak dan yang lainnya. Semua itu mempunyai tarif yang berbeda dan kita menggunakannya sesuai dengan kemampuan dan kebutuhan. Misalnya membawa barang yang banyak, tidak mungkin kita menggunakan sepeda motor, akan sangat tepat jika kita membawa mobil. Yaw kira-kira begitulah sedikit penjelasan dari design pattern yang satu ini. Sekian dulu postingan saya pada kesempatan kali ini, semoga bisa bermanfaat untuk rekan-rekan yang sedang belajar design pattern.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

2 comments

  1. Andi Saputro Reply

    Mas halaman downloadnya bagus, copy scriptnya dunk mas pingin pasang seperti itu juga di web saya boleh gak mas.