Adapter Pattern

Pada suatu hari. Seorang pelanggan datang kepada anda kemudian menyodorkan sebuah interface yang wajib anda implementasikan. Kemudian setelah anda membaca spesifikasi salah satu method pada interface itu, anda teringat, “sepertinya fungsi pada method ini sudah pernah saya buat di kelas yang lain”. Lalu daripada anda membuang waktu, tenaga, dan baris code (hehe..), anda memutuskan untuk menggunakan Adapter Pattern.

Adapter Pattern merupakan salah satu varian dari “Structural Pattern” dalam “Design Pattern” dalam teknik pemrograman berorientasi objek.( pattern = pola )

Pola ini paling bermanfaat jika suatu waktu disodorkan sebuah interface yang harus diimplementasikan. Dan ternyata ada method dalam interface yang sama fungsinya dengan method dari kelas yang sudah pernah dibuat.

Nah, pertanyaannya adalah : bagaimana mengimplementasikan interface yang disodorkan dengan memanfaatkan method pada kelas yang sudah ada? Jawabnya adalah dengan menggunakan Adapter. (SET AdapterInAction : ON)

Maka buatlah sebuah

kelas baru yang mengimpelemtasi interface yang disodorkan dan menurunkan kelas yang sudah ada.

Berikut ini diagram kelasnya :

Adapter

Adapter Pattern

Nah, lanjut ke code ya.. Supaya lebih “ngeh” (baca : paham).

Misalkan dalam interface (Interfacenya) itu ada suatu method (methodInterfaceDua) yang fungsinya sama seperti salah satu method pada kelas yang sudah ada (KelasLama), yaitu method methodKelasLama. Maka dibuatlah KelasBaru yang mengimplementasi Interfacenya dan menurunkan KelasLama.

public class KelasBaru implements Interfacenya extends KelasLama
{
//konstruktor
public KelasBaru(){
}
public void methodInterfaceSatu(){
}
public void methodInterfaceDua(){
methodKelasLama();
}
}

Perhatikan bahwa di dalam methodInterfaceDua berisi pemanggilan methodKelasLama. Jadi, sebenarnya pada saat dipanggil methodInterfaceDua, yang dijalankan adalah methodKelaslama.

Ini adalah aplikasi dari Class Adapter Pattern.

Loh kok bukan Adapter Pattern, put?! Kenapa disebut Class Adapter Pattern?

Jadi, teman-teman.. Ada dua jenis Adapter, yaitu Class Adapter dan Object Adapter. Yang dicontohkan diawal adalah Class Adapter. Dalam proses adaptasi, Class Adapter menggunakan subclassing (penurunan).

Bagaimana jika informasi yang ingin diturunkan berasal lebih dari satu objek? Tentunya tidak dapat menggunakan penurunan, karena suatu kelas hanya dapat menurunkan satu kelas.

Dan bagaimana pula jika yang ingin diadaptasi bukanlah sebuah interface melainkan sebuah abstract class? Tentunya tidak bisa menggunakan implementasi karena implementasi (implements) hanya dapat digunakan untuk interface. Berarti menggunakan penurunan (extends). Padahal, suatu kelas hanya dapat menurunkan satu kelas. Jika KelasBaru menurunkan abstractClass, bukan KelasLama, lalu bagaimana memanfaatkan KelasLama?

Nah, untuk inilah digunakan Object Adapter. Object Adapter menggunakan pendelegasian, bukan penurunan.

Adapter Pattern

Adapter Pattern

public class KelasBaru extends AbstractClass {
//atribut delegasi dari KelasLama
private KelasLama kelasLama;
//konstruktor
public KelasBaru(){
}
public void methodAbstractSatu(){
}
//"keajaiban"nya disini. Hehe..
public void methodAbstractDua(){
kelasLama.methodKelasLama();
}
}

Sekarang KelasBaru tidak lagi mengimplementasi interface Interfacenya. Tapi KelasBaru menurunkan abstractClass dan memiliki atribut kelasLama. Atribut kelasLama merupakan instance dari KelasLama. Dan di dalam methodAbstractDua dilakukan pemanggilan methodKelasLama dengan perintah : kelasLama.methodKelasLama().

Referensi :

Iklan

2 thoughts on “Adapter Pattern

  1. bagus bgt…

    mudah2an pattern yang lain dibahas juga ya…

    kayak strategy dll … ๐Ÿ™‚


    putrichairina berkata :
    Alhamdulillah jika bermanfaat.
    Sering-sering silaturrahim kesini ya.
    Mudah-mudahan membawa manfaat.
    Terima kasih sudah mampir dan memberi komentar, harry!
    Salam kenal. ๐Ÿ™‚

  2. artikel bagus ijin ngopi ya put.. makasih. ๐Ÿ˜€


    putrichairina berkata :
    Sip, Lif!
    Silahkan di-copy.
    Semoga bermanfaat ya.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

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