Thursday, 4 April 2013

Pattern State di Java, C# dan PHP

kali ini masi tentang design pattern dan penerapannya pada Java, C# dan PHP.. dan kali ini gilirannya pattern state yang akan ane bahas dan akan ane kasi contoh programnya... sebelum ane bahas pattern ini ada baiknya jika ente dengerin keluh kesan ane saat nulis tutorial ini, :( bukan karena cinta atau karena mata kuliah ini ane sekarang gak enak hati, tapi gak tau kenapa tiba - tiba saja hati merasa sakit, gak ada angin apa2 padahal, bukan juga karena mantan yang lagi mesrah sama pasarnya,
Karena ane sih udah gak peduli dia mau kayak gimana. tapi gak tau kenapa tadi pas di kampus seolah2 ada perasaan yang nyebabin ane jadi galau tanpa arah ni sekarang, apa karena kecapekan ya ?? rasa nya si itu hanya sedikit faktor pendukung dari kegalauan saat ini, tapi walaupun ane lagi galau untuk saat ini, ane terus berusaha agar tidak merusak seluruh kegiatan ane, misal ni lagi nulis blog ini, walaupun performa turun 5% :D .. ya semoga kegalauan ini berlalu... karena kegalauan ini tanpa sebab dan ane juga gak tau obatnya apa ? hehehee..
setelah ane nulis tentang keadaan ane, ajaibnya sekarang ane udah sedikit mendingan dari pada tadi, :D dan sekarang ane mau jelasin tentang pattern state ini, pattern state adalah sebuah pola (algoritma) dimana sebuah object bisa mengganti - mengganti2 akses nya ke object lain untuk menggali informasi, tergantung internal state atau input nya, semoga aja ente paham dengan penjelasan ane :D ... biar gak tambah pusing sekarang kita coba implementasi nya di Java, C# dan PHP

Java
package State;

public class MainClass {
 public static void main(String[] args) {
  Mahasiswa mahasiswa = new Mahasiswa(new Happy());
  System.out.println("Mahasiswa saat senang raut muka nya akan "+mahasiswa.Wajah()+" dan suaranya akan "+mahasiswa.Suara());
  mahasiswa.SetState(new Sedih());
  System.out.println("Mahasiswa saat sedih raut muka nya akan "+mahasiswa.Wajah()+" dan suaranya akan "+mahasiswa.Suara());
 }
}

interface EmosionalStatus{
 public String Wajah();
 public String Suara();
}

class Happy implements EmosionalStatus{
 @Override
 public String Suara() {
  return "Naik Turun";
 }
 @Override
 public String Wajah() {
  return "Ceria";
 }
}

class Sedih implements EmosionalStatus{
 @Override
 public String Suara() {
  return "Pelan";
 }
 @Override
 public String Wajah() {
  return "Melas";
 }
}

class Mahasiswa implements EmosionalStatus{
 public Mahasiswa(EmosionalStatus status) {
  this.status = status;
 }
 
 private EmosionalStatus status;
 
 public void SetState(EmosionalStatus status){
  this.status = status;
 } 
 
 @Override
 public String Wajah() {
  return status.Wajah();
 }
 
 @Override
 public String Suara() {
  return status.Suara();
 }
}  


C#
using System;

namespace State
{
 class Program
 {
  public static void Main(string[] args)
  {
   Mahasiswa mahasiswa = new Mahasiswa(new Happy());
   Console.WriteLine("Mahasiswa saat senang raut muka nya akan "+mahasiswa.Wajah()+" dan suaranya akan "+mahasiswa.Suara());
   mahasiswa.SetStatus(new Sedih());
   Console.WriteLine("Mahasiswa saat sedih raut muka nya akan "+mahasiswa.Wajah()+" dan suaranya akan "+mahasiswa.Suara());
   
   Console.ReadKey(true);
  }
 }
 
 interface EmosionalStatus{
  string Wajah();
  string Suara();
 }
 
 class Happy : EmosionalStatus{
  
  public string Suara() {
   return "Naik Turun";
  }
  
  public string Wajah() {
   return "Ceria";
  }
 }
 
 class Sedih : EmosionalStatus{
  
  public string Suara() {
   return "Pelan";
  }
  
  public string Wajah() {
   return "Melas";
  }
 }

 class Mahasiswa : EmosionalStatus{
  public Mahasiswa(EmosionalStatus status) {
   this.status = status;
  }
  
  private EmosionalStatus status;  
  
  public void SetStatus(EmosionalStatus status){
   this.status = status;
  }
  
  public string Wajah() {
   return status.Wajah();
  }  
  
  public string Suara() {
   return status.Suara();
  }
 }
}  


PHP
<?php

 interface EmosionalStatus{
  function Wajah();
  function Suara();
 }

 class Happy implements EmosionalStatus{
  
  function Suara() {
   return "Naik Turun";
  }
  
  function Wajah() {
   return "Ceria";
  }
 }

 class Sedih implements EmosionalStatus{
  
  function Suara() {
   return "Pelan";
  }
  
  function Wajah() {
   return "Melas";
  }
 }

 class Mahasiswa implements EmosionalStatus{
  function __construct($status) {
   $this->status = $status;
  }
  
  private $status;  
  
  function SetStatus($status){
   $this->status = $status;
  }
  
  function Wajah() {
   return $this->status->Wajah();
  }  
  
  function Suara() {
   return $this->status->Suara();
  }
 }
 
 $mahasiswa = new Mahasiswa(new Happy());
 echo("Mahasiswa saat senang raut muka nya akan ".$mahasiswa->Wajah()." dan suaranya akan ".$mahasiswa->Suara()."< br />");
 $mahasiswa->SetStatus(new Sedih());
 echo("Mahasiswa saat sedih raut muka nya akan ".$mahasiswa->Wajah()." dan suaranya akan ".$mahasiswa->Suara()."< br />");

?>  


Kalo ente lihat pada contoh pattern state di Java, C#, C++ dan PHP yang ane tulis diatas... ada sebuah interface namanya EmosionalStatus yang mempunyai 2 method kosong, yang akan di implementasikan jika sudah diturunkan pada sebuah class, interface EmotionalStatus diimplementasikan pada 2 class yaitu Happy dan Sedih. kemudian ada sebuah class namanya Mahasiswa yang juga sama2 implementasi dari interface EmosionalStatus tetapi class ini mempunyai field bertipe interface emosionalStatus tadi dan untuk menginisialisasinya dikirim lewat constructor dan satu function namanya SetStatus... 
sekarang kita pindah ke main program, kita membuat sebuah object instance dari class mahasiswa dan mengisi constructor nya dengan object instance dari class Happy, setelah itu object instance dari class mahasiswa mengakses function wajah() dan suara(), dan menghasilkan isi sebuah function dari class Happy. kemudian object instance mahasiswa mengakses method SetStatus dan mengisi parameternya dengan object instance class Sedih, lalu kembali mengakses function wajah() dan function suara() dan hasilnya adalah isi dari function class Sedih... itu lah cara kerja pattern ini, memungkinkan sebuah object merubah akses nya ke object lain untuk menggali informasi :D ... paham kan ?? gampang kan ?? hehehee oke... kali ini cukup sampai disini dulu ya ? kita lanjutkan pembahasan selanjutnya tentang desain pattern dan penerapannya di Java, C# dan PHP pada postingan selanjutnya :)

No comments:

Post a Comment