Rabu, 24 April 2013

Adapter Pattern

,

Kegunaan umum :
Menurut Gang of Four, Adapter patter digunakan untuk mengkonversi nama nama fungsi dan nama agar cocok dengan yang diinginkan oleh client (kelas yang akan menggunakan). Adapter memungkinkan kelas untuk bisa bekerja bersama sama walaupun sebelum tidak memungkinkan Karen a perbedaan nama nama fungsi dan variabel.
Konteks :
  • -          Diinginkan untuk menggunakan suatu class dengan antar muka (method-method public) tertentu tanpa mengubah definisi class tersebut. Class ini kita sebut adaptee.
  • -          Konteks permasalahan dimana kita ingin menggunakan class ini membutuhkan antar muka yang berbeda dari yang dimiliki class adaptee.Antarmuka yang  diperlukan  untuk kita sebut target.
  • -          Antarmuka untuk target dan antarmuka yang dimiliki adaptee secara konsep berkaitan.

Solusi :
-          Antarmuka yang dibutuhkan client(target) didefinisikan sebagai interface dengan method-method yang dibutuhkan untuk menyelesaikan tugas.
-          Definisikan sebuah class adapter yang mengimplementasikan interface target ini.
-          Class adapter memiliki referensi terhadap objek adaptee (relasi compose a.k.a HAS_A).class adapter  menerjemahkan  method yang dideklarasikan pada interface target ke dalam method dari adaptee.
-          Client membungkus objek adaptee ke dalam objek adapter. Client melaksanakan tugasnya dengan memanggil method adapter, dan adapter menerjemahkannya dengan memanggil method adaptee yang bersesuaian.

Desain umum class diagram Adapter :






Studi Kasus
Misalkan kita telah memiliki sebuah kelas lingkaran dalam desain aplikasi existing. Pada tahapan berikutnya muncul beberapa kelas baru yang yang hamper sejenis seperti garis, titik dan segiempat. Garis titik dan segiempat merupakan mengimplementasikan interface bidang_datar. Garis titik dan segiempat menshare beberapa fungsi seperti : tampil(), aturwarna(), sembunyikan(). Ketinya merupakan turunan dari kelas bidangdatar.
Kelas lingkaran merupakan kelas existing yang sebenarnya bukan turunan dari kelas bidang_datar karena pada saat kelas lingkaran ini dibuat kelas bidang_datar juga belum ada.  Celakanya adalah kelas lingkaran ini telah memiliki beberapa fungsi yang mirip tetapi namanya lain misal untuk menampilkan nama fungsinya display(), menyembunyikan hide() dan mengeset warna setcolor()
Pada tahap ini ada 2 solusi yang mungkin bisa dilakukan :
·Mengubah isi kelas lingkaran dengan mengubah kelas lingkaran menjadi turunan dari kelas bidang_datar dan mengubah nama nama fungsi milik lingkaran sesuai dengan nama nama fungsi yang telah dideklarasikan di kelas bidang_datar sebagai induknya. Solusi ini merupakan pilihan yang buruk karena 2 hal,
·pertama karena belum tentu kita mendapatkan source code kelas lingkaran.
·Kedua karena mengunah kode program selalu menghasilkan error baru, ingat bahwa kelas lingkaran adalah kelas eksisting yang barangkali sudah ada kelas lain yang menginstansiasi dan memanggil fungsi fungsi asli milik kelas ini sehingga ketika diganti mungkin akan menimbulkan error di berbagai tempat lain kode program kita.
·Membuat sebuah kelas baru yang merupakan implementasi dari kelas bidang_datar, kelas ini dapat mewakili kelas lingkaran misalkan diberi nama lingkaran_new. Lingkaran_new sebagai turunan dari kelas bidang_datar akan mewarisi semua fungsi milik bidang_datar yaitu : tampil(), aturwarna() dan sembunyikan().  Agar kelas ini dapat memanfaatkan semua resource (kode program) yang telah ada di kelas lingkaran asli (existing) maka di buat kelas ini memiliki salah satu atribut yang bertipe lingkaran. Isi fungsi tampil adalah mengeksekusi fungsi display milik kelas lingkaran yang asli demikian juga dengan fungsi fungsi yang lain.

Perhatikan desain di bawah ini :



Solusi menggunakan adapter pattern :


Kode Program
public class main {
    private bidang_datar mbidang_datar;
    public main () {
        mbidang_datar = new Adapter();
        mbidang_datar.setwarna();
        mbidang_datar.tampil();
        mbidang_datar.sembunyi();
        mbidang_datar = new segi4();
        mbidang_datar.setwarna();
        mbidang_datar.tampil();
        mbidang_datar.sembunyi();
    }
}

public class lingkaran {
    public lingkaran () {
    }
    public void display () {
    }
    public void setcolor () {
    }
    public void hide () {
    }
    public void specificRequest () {
    }
}

public class Adapter implements bidang_datar {
    private lingkaran mlingkaran;
    public void request () { 
    }
    public void tampil () {
     mlingkaran.display();
    }
    public void sembunyi () {
        mlingkaran.hide();
    }
    public void setwarna () {
        mlingkaran.setcolor();
    }
}


0 komentar to “Adapter Pattern”

Posting Komentar