Tuesday 9 April 2013

Pattern Strategy di Java, C# dan PHP

design pattern yang ane bahas kali ini tentang strategy pattern yang termasuk kategory behaviour pattern yang menangani kelakuan program. dan seperti biasanya ane kasi penerapannya nanti di Java, C# dan PHP.. akhir2 ini ane jadi agak sedikit males nulis di blog kesayangan ini karena beberapa beban yang harus ane selesaikan dengan cepat dalam waktu yang sangat singkat :( . rasanya memang seperti tak punya hidup, memang tidak bisa mengatur sedikit waktu untuk bersantae si... dikarenakan ke padatan jadwal.. memang nasibnya programmer kali yak ? :(
untuk sedikit bermain saja sudah terasa banget waktu terbuang2.. hal ini sangat mengganggu ane sebenarnya... smoga besok2 ada kabar baik yang bisa membangkitkan kembali semangat ane untuk berkarya dengan cepat lagi. pengertian dari pattern strategy ini memungkinkan algoritma bervariasi secara independen dari client yang memanfaatkannya.. kali ini ane kasi contoh  kasus nya seperti validasi rentang tipe data dalam pemrograman... seperti yang ente tau, type data byte mempunyai rentang antara 0 - 255 sedangkan integer rentangnya mulai -2147483648 sampai  2147483647 ... disini kita bisa memakainya sebagai simulasi penerapan design pattern strategy untuk menvalidasi sebuah bilangan, berikut penerapannya di Java, C# dan PHP

Java
package Strategi;

public class MainClass {
 public static void main(String[] args) {
  int nomer = 400;
  System.out.println("Input Angka = "+nomer);
  Context context = new Context(new VirtualByte(), nomer);
  System.out.println(context.GetResult());
  context = new Context(new VirtualInteger(), nomer);
  System.out.println(context.GetResult());
 }
}

interface Strategi{
 String CekNomer(int angka);
}

class VirtualByte implements Strategi{
 @Override
 public String CekNomer(int angka) {
  if(angka >= 0 && angka <= 255){
   return "Angka Sesuai dengan Type Data Byte";
  }else{
   return "Angka diluar Rentang Type Data Byte";
  }  
 }
}

class VirtualInteger implements Strategi{
 @Override
 public String CekNomer(int angka) {
  if(angka >= -2147483648 && angka <=  2147483647){
   return "Angka Sesuai dengan Type Data Integer";
  }else{
   return "Angka diluar Rentang Type Data Integer";
  }  
 }
}

class Context{
 private Strategi strategi = null;
 private int nomer;
 public Context(Strategi strategi,int nomer) {
  this.strategi = strategi;
  this.nomer = nomer;
 }
 public void SetStrategy(Strategi strategy){
  this.strategi = strategy;
 }
 public int GetNomer(){
  return this.nomer;
 }
 public String GetResult(){
  return this.strategi.CekNomer(this.nomer);
 }
}  

C#
using System;

namespace Strategy
{
 class Program
 {
  public static void Main(string[] args)
  {
   int nomer = 400;
   Console.WriteLine("Input Angka = "+nomer);
   Context context = new Context(new VirtualByte(), nomer);
   Console.WriteLine(context.GetResult());
   context = new Context(new VirtualInteger(), nomer);
   Console.WriteLine(context.GetResult());
   
   
   Console.ReadKey(true);
  }
 }
 
 interface Strategi{
  string CekNomer(int angka);
 }
 
 class VirtualByte : Strategi{  
  public string CekNomer(int angka) {
   if(angka >= 0 && angka <= 255){
    return "Angka Sesuai dengan Type Data Byte";
   }else{
    return "Angka diluar Rentang Type Data Byte";
   }  
  }
 }
 
 class VirtualInteger : Strategi{  
  public string CekNomer(int angka) {
   if(angka >= -2147483648 && angka <=  2147483647){
    return "Angka Sesuai dengan Type Data Integer";
   }else{
    return "Angka diluar Rentang Type Data Integer";
   }  
  }
 }
 
 class Context{
  private Strategi strategi = null;
  private int nomer;
  public Context(Strategi strategi,int nomer) {
   this.strategi = strategi;
   this.nomer = nomer;
  }
  public void SetStrategy(Strategi strategy){
   this.strategi = strategy;
  }
  public int GetNomer(){
   return this.nomer;
  }
  public string GetResult(){
   return this.strategi.CekNomer(this.nomer);
  }
 }
}  

PHP
<?php
 interface Strategi{
  function CekNomer($angka);
 }

 class VirtualByte implements Strategi{  
  function CekNomer($angka) {
   if($angka >= 0 && $angka <= 255){
    return "Angka Sesuai dengan Type Data Byte< br />";
   }else{
    return "Angka diluar Rentang Type Data Byte< br />";
   }  
  }
 }

 class VirtualInteger implements Strategi{  
  function CekNomer($angka) {
   if($angka >= -2147483648 && $angka <=  2147483647){
    return "Angka Sesuai dengan Type Data Integer<br />";
   }else{
    return "Angka diluar Rentang Type Data Integer<br />";
   }  
  }
 }

 class Context{
  private $strategi = null;
  private $nomer;
  function __construct($strategi,$nomer) {
   $this->strategi = $strategi;
   $this->nomer = $nomer;
  }
  function SetStrategy($strategy){
   $this->strategi = $strategy;
  }
  function GetNomer(){
   return $this->nomer;
  }
  function GetResult(){
   return $this->strategi->CekNomer($this->nomer);
  }
 }
 
 $nomer = 400;
 echo("Input Angka = ".$nomer."< br />");
 $context = new Context(new VirtualByte(), $nomer);
 echo($context->GetResult());
 $context = new Context(new VirtualInteger(), $nomer);
 echo($context->GetResult());
?>  

begitulah gan penerapan design pattern strategy di Java, C# dan PHP :D ... semoga bermanfaat buat kita semua.. :)

No comments:

Post a Comment