Thursday 4 April 2013

Pattern Proxy di Java, C# dan PHP

Design pattern proxy kali ini gilirannya untuk dibahas, setelah sebelumnya ane udah bahas design pattern yang lain :D, dan penerapannya masi seperti biasa yaitu Java, C# dan PHP, bagi yang pengen C++ kirim donasi dulu donk nanti ane tulis deh semua design pattern tentang C++ dari awal sampai akhir, hehehee... malam ini seperti malam2 sebelum nya, masi sepi dan sendiri dan dari tadi juga hp gak ada bunyinya :D ...
gak papalah kalo saat ini ane jomblo dulu, dari pada galau :D .. perbadingan saat ane jomblo dan punya pacar sepertinya perbedaannya sangat signifikan... bisa dirasa dari beberapa karya yang sudah ane selesaikan saat ane jomblo seperti ini, dan ane bisa tenang belajar... setahun yang lalu ane punya pacar, sebenar nya ane masi bisa belajar saat itu, bahkan ane bisa selesaikan tugas OOP dari pak dosen yang memberikan skitar kalo gak salah ada 8 pembahasan yang juga udah ane upload di blog ini, ane kerjain semalam :D ... alhamdulillah... itu saat ane punya pacar... kalo gak punya pacar kira2 gimana ya ?? wkwkwkwkwkwk... Wallohu a'lam lah... tapi itu semua pasti ada sisi buruk dan sisi baiknya...
Oke sekarang saat nya kita membahas pattern Proxy setelah sedikit berbasa - basi :D ... Pattern proxy ini termasuk dari kategory desain pattern struktural dan itu artinya menangani pengaturan struktur dari program... Pattern proxy ini digunakan untuk pencegahan inisialisasi object class sampai benar2 dibutuhkan inisialisasi dari class tersebut... dari pada bingung mending kita langsung ke implementasi dan penerapannya pada Java, C#, dan PHP..

Java
package Proxy;

import java.util.Date;

public class MainClass {
 public static void main(String[] args) {
  Proxy proxy = new Proxy();
  
  Printer_1 printer_1 = new Printer_1();
  printer_1.Text();  
  
  proxy.Text();
 }
}

abstract class Temporary{
 public void Text(){
  System.out.println("Im a Text from class temporary");
 }
}

class Printer_1 extends Temporary{
 public Printer_1() {
 } 
}

class Printer_2 extends Temporary{
 public Printer_2() {
  try{
   Thread.sleep(5000);
  }catch (Exception e) {
   e.printStackTrace();
  }
 }
}

class Proxy{
 Printer_2 printer_2 = null;
 public Proxy() {
  System.out.println("Class Proxy di inisialisasi");
 }
 
 public void Text(){
  if(printer_2 == null){
   printer_2 = new Printer_2();
  }
  System.out.println("---------------------------");
  printer_2.Text();
  System.out.println("dari class Proxy");
  System.out.println("---------------------------");
 }
}  

C#
/*
 * Created by SharpDevelop.
 * User: MADARA UCHIHA
 * Date: 30/03/2013
 * Time: 6:14
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Threading;

namespace Proxy
{
 class Program
 {
  public static void Main(string[] args)
  {
   Proxy proxy = new Proxy();
  
   Printer_1 printer_1 = new Printer_1();
   printer_1.Text();  
   
   proxy.Text();
   Console.ReadKey(true);
  }
 }
 
 abstract class Temporary{
  public void Text(){
   Console.WriteLine("Im a Text from class temporary");
  }
 }
 
 class Printer_1 : Temporary{
  public Printer_1() {
  } 
 }
 
 class Printer_2 : Temporary{
  public Printer_2() {
   try{
    Thread.Sleep(5000);
   }catch (Exception e) {
    Console.WriteLine(e.Message);
   }
  }
 }
 
 class Proxy{
  Printer_2 printer_2 = null;
  public Proxy() {
   Console.WriteLine("Class Proxy di inisialisasi");
  }
  
  public void Text(){
   if(printer_2 == null){
    printer_2 = new Printer_2();
   }
   Console.WriteLine("---------------------------");
   printer_2.Text();
   Console.WriteLine("dari class Proxy");
   Console.WriteLine("---------------------------");
  }
 }
}  

PHP
<?php
 abstract class Temporary{
  function Text(){
   echo("Im a Text from class temporary<br />");
  }
 }

 class Printer_1 extends Temporary{
  function __construct() {
  } 
 }

 class Printer_2 extends Temporary{
  function __construct() {
   sleep(5);
  }
 }

 class Proxy{
  private $printer_2 = null;
  function __construct() {
   echo("Class Proxy di inisialisasi< br />");
  }
  
  function Text(){
   if($this->printer_2 == null){
    $this->printer_2 = new Printer_2();
   }
   echo("---------------------------< br />");
   echo date('h:i:s')."<br />";
   $this->printer_2->Text();
   echo("dari class Proxy<br />");
   echo("---------------------------< br />");
  }
 }
 
 $proxy = new Proxy();
 echo date('h:i:s')."<br />";
 $printer_1 = new Printer_1();
 $printer_1->Text();  
 
 $proxy->Text();
?>  

pada contoh penerapan pattern proxy ini ane kasi sebuah perbandingan.. antara inisialisasi class langsung dan inisialisasi saat object bener2 dibutuhkan :D ... kalo ente lihat class Printer_1 diinisialisasi tanpa menggunakan proxy, sedangkan class printer_2 di inisialisasi dengan proxy, jadi ketika bener2 dibutuhkan, saat class proxy di inisialisasi, class printer_2 belum di inisialisasi sampai ketika function Text dipanggil dan melakukan inisialisasi class printer_2 :D ... begitulah konsep pattern proxy ini... selain membatasi penganalisasian sebelum object bener2 dibutuhkan, proxy ini juga digunakan untuk mengakses class lain ya contoh nya class proxy mengakses class Printer_2 ... paham ya ?? hehehee :D ane kira cukup sekian postingan ini, jika gak paham silahkan komentar atau tanya di facebook :) semoga bermanfaat

No comments:

Post a Comment