Proxy Class: Memberikan Kesan Sesungguhnya


Aku akan mencoba memahami konsep proxy class dengan membuat program sederhana. Aku akan membuat sebuah proxy class yang akan menampilkan pesan ke layar setiap kali method dari class yang sesungguhnya dikerjakan. Untuk itu pertama-tama, aku akan membuat interface berikut:

public interface Latihan1 {

  public void cetakSample();

}

 

Kemudian aku membuat implementasi-nya sebagai berikut:

 

public class Latihan1Impl implements Latihan1 {

  public void cetakSample() {
     System.out.println("SAMPLE");
  }

}

 

Lalu aku membuat sebuah class untuk menghasilkan proxy seperti berikut ini:

 

import java.lang.reflect.*;

public class LogConsole implements InvocationHandler {

  private Object obj;

  public Object instanceBaru(Object obj) {
     this.obj = obj;
     return Proxy.newProxyInstance(
        obj.getClass().getClassLoader(),
        obj.getClass().getInterfaces(),
        this);
  }

  public Object invoke(Object proxy, Method m, Object[] args)
     throws Throwable {

     System.out.println("-- Sebelum eksekusi method --");
     Object o = m.invoke(obj, args);
     System.out.println("-- Sesudah eksekusi method --");
     return o;
  }

}

 

Setelah ini aku bisa membuat program utama, yang kira-kira seperti ini:

 

   LogConsole logConsole = new LogConsole();
   Latihan1 lat = (Latihan1) logConsole.instanceBaru(new Latihan1Impl());
   lat.cetakSample();

 

Sekarang, saat “cetakSample()” dipanggil, secara otomatis “invoke()” di class “LogConsole” dikerjakan, sehingga aku bisa melihat ada 3 baris tulisan yang muncul di layar. Aku juga meminta class lain (asalkan mengikuti syarat proxy, punya interface dan implementation, dsb) untuk punya tambahan system.out.println() dari “LogConsole” juga, misalnya dengan contoh kode berikut:

 

   Latihan2 lat2 = (Latihan2) logConsole.instanceBaru(new Latihan2Impl());
   lat2.cetakSample2();

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: