Tutorial Design Pattern : Penerapan Design Pattern Memento di PHP

Mata masih melek jam segini, padahal sekarang sudah hari raya Nyepi. Artinya lampu, alat-alat elektronik dan aktifitas lainnya harus dihentikan selama 1 hari full. Saya langgar dikit lah, nanggung tinggal dikit lagi :). Postingan malam ini akan membahas tentang design pattern Memento. Kalau di-Indonesia-kan artinya kenang-kenangan. Yupzzz, sejalan dengan artinya dimana design pattern yang satu ini akan merekam sebuah jejak (yang memang direkam) walaupun ditimpa oleh jejak-jejak yang lainnya, nantinya rekaman jejak tersebut bisa dimunculkan kembali. Konsep kerjanya, dengan menggunakan 2 class yang mempunyai method yang sama. Bedanya hanya di bagian __construct(), class yang kedua menyimpan object hasil definisi dari class yang pertama. Saya akan mencoba untuk menerapkan design pattern momento dalam studi kasus penadaan halaman web. Halaman web yang menarik bisa ditandai terlebih dahulu (seperti membaca sebuah buku, kalau ada halaman yang menarik yaw dilipat untuk menandainya) dan ketika dibutuhkan bisa ditampilkan kembali.

Kita memerlukan 2 buah class yaitu class Jelajah_Web yang bertugas untuk menampilkan judul web serta link web. Class kedua yaitu class Tandai_Web bertugas untuk menandai tautan yang diinginkan. Pada class Tandai_Web, variabel yang diterima ialah object yang telah tercipta dari class Jelajah_Web.

class Jelajah_Web {
    private $judul;
    private $link_url;
    function __construct($in_judul, $in_link_url) {
      $this->set_judul($in_judul);
      $this->set_link_url($in_link_url);
    }
    public function ambil_judul() {
      return $this->judul;
    }
    public function set_judul($in_judul) {
      $this->judul = $in_judul;
    }
    public function ambil_link_url() {
      return $this->link_url;
    }
    public function set_link_url($in_link_url) {
      $this->link_url = $in_link_url;
    }
}

class Tandai_Web {
    private $judul;
    private $link_url;
    function __construct(Jelajah_Web $Jelajah_Web) {
      $this->set_judul($Jelajah_Web);
      $this->set_link_url($Jelajah_Web);
    }
    public function ambil_judul(Jelajah_Web $Jelajah_Web) {
      $Jelajah_Web->ambil_judul($this->judul);
    }
    public function set_judul(Jelajah_Web $Jelajah_Web) {
      $this->judul = $Jelajah_Web->ambil_judul();
    }
    public function ambil_link_url(Jelajah_Web $Jelajah_Web) {
      $Jelajah_Web->set_link_url($this->link_url);
    }
    public function set_link_url(Jelajah_Web $Jelajah_Web) {
      $this->link_url = $Jelajah_Web->ambil_link_url();
    }
}

Cara penggunaannya kira-kira seperti di bawah ini. Contoh halaman web yang disimpan, saya gunakan blog saya saja yaw ;).

  $Jelajah_Web = new Jelajah_Web('NgBlog Biar Gak GoBlog, BlogNya Gede Lumbung','http://gedelumbung.com');
  $Tandai_Web = new Tandai_Web($Jelajah_Web);

  echo'Judul Website : '.$Jelajah_Web->ambil_judul();
  echo '<br>';
  echo'Alamat Link : '.$Jelajah_Web->ambil_link_url();
  echo '<br><br>';

  $Tandai_Web->set_judul($Jelajah_Web);

  $Jelajah_Web->set_link_url("http://gedelumbung.com/?page_id=619");
  echo'Link Profil: '.$Jelajah_Web->ambil_link_url();
  echo '<br><br>';

  $Jelajah_Web->set_link_url("http://gedelumbung.com/?page_id=446");
  echo'Link Sahabat : '.$Jelajah_Web->ambil_link_url();
  echo '<br><br>';

  $Tandai_Web->ambil_link_url($Jelajah_Web);
  echo'Kembali ke Link Awal : '.$Jelajah_Web->ambil_link_url();
  echo '<br><br>';

Dalam design pattern Memento, terdapat 3 peran yang berebeda dan saling berhubungan yaitu :

  1. Originator, object yang tau kapan harus menyimpan dirinya sendiri
  2. Caretaker, object yang tau kenapa dan kapan object Originator untuk menyimpan dan mengembalikan dirinya kembali
  3. Memento, kunci yang tertulis dan dibaca oleh Originator dan dipanggil oleh Caretaker

Sekian dulu postingan saya malam ini. Selamat menunaikan ibadah Nyepi untuk umat Hindu sedharma. Semoga selalau diberikan kemudahan dari Ida Sang Hyang Widhi Wasa.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

3 comments

  1. ebuh Reply

    postingan.a ok banget, trus
    mas bro maw nanya, kalo maw jadiin per 1 file 1 class , gmana yah hubungin.a?
    thx yooo