Thursday 4 April 2013

Pattern Memento di Java, C# dan PHP

Memento pattern secara bahasa artinya adalah kenang-kenangan :) pattern memento ini termasuk kategory design pattern behaviour yang menangani kelakuan dari program... kali ini memang saatnya pattern memento ane bahas, karena hati ane memang lagi pengen bahas pattern memento ini :D dan nanti akan ane kasi penerapannya di Java, C# dan PHP ... Pattern memento ini secara gampangnya adalah pola yang dapat menyimpan sebuah proses ataupun sebuah moment, contoh nya yang sangat gampang dan kita ketahui seperti yang ada di Windows yaitu system restore...
System restore ini bisa menyimpan waktu dan keadaan system operasi. suatu saat kita menyimpan sebuah waktu / sebuah keadaan laptop kita, kemudian besok2 nya ada kerusakan pada system operasi, maka kita tidak perlu buru2 menginstal ulang komputer, karena kita sudah pernah menyimpan sebuah moment dari komputer itu kmaren2, jadi tinggal di restore atau dikembalikan saja maka akan kembali pada moment yang kita simpan tadi :D, cara kerja Pattern memento ini seperti itu..
kali ini ane akan kasi contoh yang kasusnya berbeda dari penjelasan ane tadi, kasus ini menceritakan saat ane PDKT sama mantan ane sampai akhir nya putus :D hehehee... dan ini bukan curhat loo ya ? hanya sebagai simulasi saja dan pada penerapan pattern memento ini ane akan simpan sebuah moment yang indah menurut ane dan saat putus ane akan kembalikan dengan pattern memento ini... begini gan penerapan pattern memento di Java, C# dan PHP :)

Java

package Memento;

import Memento.StatusInfo.Memento;

public class MainClass {
 public static void main(String[] args) {
  Controller controller = new Controller();
  StatusInfo info = new StatusInfo("Rizal Afani", "January", "Jomblo", "Kenalan");
  System.out.println(info);
  info.SetState("February", "Jomblo", "PDKT");
  System.out.println("\nsimpan moment\n");
  controller.Save(info);
  System.out.println(info);
  info.SetState("Maret", "Berpacaran", "Berpacaran");
  System.out.println(info);
  info.SetState("Juni", "Berpacaran", "Galau");
  System.out.println(info);
  info.SetState("Juli", "Jomblo", "Galau");
  System.out.println(info);
  System.out.println("\n=========================================================================");
  System.out.println("|| Andaikan saja waktu bisa diulang dengan pattern memento seperti ini ||");
  System.out.println("=========================================================================\n");
  System.out.println("kembalikan moment\n");
  controller.Restore(info);
  System.out.println(info);
 }
}

class StatusInfo{
 private String name, bulan, status,keadaan;
 public StatusInfo(String name,String bulan,String status,String keadaan) {
  this.name = name;
  this.bulan = bulan;
  this.status = status;
  this.keadaan = keadaan;
 }
 public void SetState(String bulan,String status,String keadaan){
  this.bulan = bulan;
  this.status = status;
  this.keadaan = keadaan;
 }
 
 public String toString(){
  return this.name+" pada bulan "+this.bulan+" sedang "+this.keadaan+" dengan status "+this.status;
 }
 
 public Memento Save(){
  return new Memento(bulan, status, keadaan);
 }
 
 public void Restore(Object objMemento){
  Memento _obj = (Memento)objMemento;
  this.bulan = _obj.bulan;
  this.status = _obj.status;
  this.keadaan = _obj.keadaan;
 }
 
 public class Memento{
  public String bulan, status,keadaan;
  public Memento(String bulan,String status,String keadaan) {
   this.bulan = bulan;
   this.status = status;
   this.keadaan = keadaan;
  }
 }
}

class Controller{
 private Object objMemento;
 public void Save(StatusInfo info){
  this.objMemento = info.Save();
 }
 public void Restore(StatusInfo info){
  info.Restore(this.objMemento);
 }
}  


C#
using System;

namespace Memento
{
 class Program
 {
  public static void Main(string[] args)
  {
   Controller controller = new Controller();
   StatusInfo info = new StatusInfo("Rizal Afani", "January", "Jomblo", "Kenalan");
   Console.WriteLine(info.ToString());
   info.SetState("February", "Jomblo", "PDKT");
   Console.WriteLine("\nsimpan moment\n");
   controller.Save(info);
   Console.WriteLine(info.ToString());
   info.SetState("Maret", "Berpacaran", "Berpacaran");
   Console.WriteLine(info.ToString());
   info.SetState("Juni", "Berpacaran", "Galau");
   Console.WriteLine(info.ToString());
   info.SetState("Juli", "Jomblo", "Galau");
   Console.WriteLine(info.ToString());
   Console.WriteLine("\n=========================================================================");
   Console.WriteLine("|| Andaikan saja waktu bisa diulang dengan pattern memento seperti ini ||");
   Console.WriteLine("=========================================================================\n");
   Console.WriteLine("kembalikan moment\n");
   controller.Restore(info);
   Console.WriteLine(info.ToString());   
   
   Console.ReadKey(true);
  }
 }
 
 class StatusInfo{
  private String name, bulan, status,keadaan;
  public StatusInfo(String name,String bulan,String status,String keadaan) {
   this.name = name;
   this.bulan = bulan;
   this.status = status;
   this.keadaan = keadaan;
  }
  public void SetState(String bulan,String status,String keadaan){
   this.bulan = bulan;
   this.status = status;
   this.keadaan = keadaan;
  }
  
  public String ToString(){
   return this.name+" pada bulan "+this.bulan+" sedang "+this.keadaan+" dengan status "+this.status;
  }
  
  public Memento Save(){
   return new Memento(bulan, status, keadaan);
  }
  
  public void Restore(Object objMemento){
   Memento _obj = (Memento)objMemento;
   this.bulan = _obj.bulan;
   this.status = _obj.status;
   this.keadaan = _obj.keadaan;
  }
  
  public class Memento{
   public String bulan, status,keadaan;
   public Memento(String bulan,String status,String keadaan) {
    this.bulan = bulan;
    this.status = status;
    this.keadaan = keadaan;
   }
  }
 }
 
 class Controller{
  private Object objMemento;
  public void Save(StatusInfo info){
   this.objMemento = info.Save();
  }
  public void Restore(StatusInfo info){
   info.Restore(this.objMemento);
  }
 }
}  


PHP
<?php
 class StatusInfo{
  private $name, $bulan, $status,$keadaan;
  function __construct($name,$bulan,$status,$keadaan) {
   $this->name = $name;
   $this->bulan = $bulan;
   $this->status = $status;
   $this->keadaan = $keadaan;
  }
  function SetState($bulan,$status,$keadaan){
   $this->bulan = $bulan;
   $this->status = $status;
   $this->keadaan = $keadaan;
  }
  
  function toString(){
   return $this->name." pada bulan ".$this->bulan." sedang ".$this->keadaan." dengan status ".$this->status."<br />";
  }
  
  function Save(){
   return new Memento($this->bulan, $this->status, $this->keadaan);
  }
  
  function Restore($objMemento){
   $this->bulan = $objMemento->bulan;
   $this->status = $objMemento->status;
   $this->keadaan = $objMemento->keadaan;
  }  
 }
 
 class Memento{
  public $bulan, $status,$keadaan;
  function __construct($bulan,$status,$keadaan) {
   $this->bulan = $bulan;
   $this->status = $status;
   $this->keadaan = $keadaan;
  }
 }

 class Controller{
  private $objMemento;
  function Save($info){
   $this->objMemento = $info->Save();
  }
  function Restore($info){
   $info->Restore($this->objMemento);
  }
 }
 
 $controller = new Controller();
 $info = new StatusInfo("Rizal Afani", "January", "Jomblo", "Kenalan");
 echo($info->toString());
 $info->SetState("February", "Jomblo", "PDKT");
 echo("< br />simpan moment< br />< br />");
 $controller->Save($info);
 echo($info->toString());
 $info->SetState("Maret", "Berpacaran", "Berpacaran");
 echo($info->toString());
 $info->SetState("Juni", "Berpacaran", "Galau");
 echo($info->toString());
 $info->SetState("Juli", "Jomblo", "Galau");
 echo($info->toString());
 echo("< br />=========================================================================<br />");
 echo("|| Andaikan saja waktu bisa diulang dengan pattern memento seperti ini ||< br />");
 echo("=========================================================================< br />");
 echo("kembalikan moment< br />< br />");
 $controller->Restore($info);
 echo($info->toString());

?>  

kalo ente lihat pada implementasi atau penerapan pattern memento di Java, C# dan PHP itu ada sebuah proses kemudian salah satu proses nya ane simpan (dalam hal ini saat ane PDKT) ente juga tau kalo saat2 yang indah itu saat PDKT, bukan saat pacaran, kemudian saat ane putus, ane kembalikan lagi ke saat PDKT :D ... andaikan didunia ini ada Jutsu yang bisa menyimpan dan mengembalikan waktu seperti Pattern memento ini ane akan pelajari... biar gak jomblo gini... wkwkwkwkwk tapi jomblo juga banyak hikmah nya looo hehehehehe... oke dah gan, semoga ente paham dan semoga bermanfaat buat ane, ente juga para pengunjung blog ini :)

No comments:

Post a Comment