"Halo, Amigo! Hari ini saya akan memberi tahu Anda apa sebenarnya « adaptor » itu. Saya harap setelah mempelajari topik ini, Anda akan memiliki pemahaman yang jauh lebih baik tentang aliran input/output."

Adaptor - 1

Bayangkan program Anda menggunakan dua kerangka kerja yang ditulis oleh programmer/perusahaan lain. Kedua framework tersebut sangat bagus dan menggunakan prinsip OOP: abstraksi, polimorfisme, enkapsulasi. Bersama-sama, mereka hampir sepenuhnya mencakup apa yang perlu dilakukan oleh program Anda. Anda pergi dengan tugas sederhana. Anda harus meneruskan objek yang dibuat oleh satu framework ke framework lainnya. Tetapi kedua kerangka kerja itu sama sekali berbeda dan "tidak tahu satu sama lain", yaitu mereka tidak memiliki kelas yang sama. Anda perlu mengubah objek dari satu kerangka kerja menjadi objek kerangka kerja lainnya.

Tugas ini dapat diselesaikan dengan indah dengan menerapkan teknik « adaptor » (pola desain):

kode jawa Keterangan
class MyClass implements Interface2
{
 private Interface1 object;
 MyClass(Interface1 object)
 {
  this.object = object;
 }
// This is where we put the Interface2 methods 
// that call Interface1 methods
}
Ini mencerminkan pola desain adaptor.

Ide dasarnya adalah kelas MyClass mengonversi (menyesuaikan) satu antarmuka ke antarmuka lainnya.

"Bisakah Anda memberi saya contoh yang lebih spesifik?"

"Oke. Katakanlah setiap kerangka kerja memiliki antarmuka "daftar" uniknya sendiri. Mereka mungkin terlihat seperti ini:"

kode jawa Keterangan
interface AlphaList
{
 void add(int value);
 void insert(int index, int value);
 int get(int index);
 void set(int index, int value);
 int count();
 void remove(int index);
}
Kode dari kerangka pertama ( Alfa ).

AlphaList adalah salah satu antarmuka yang memungkinkan kode framework berinteraksi dengan kode yang menggunakan framework.

class AlphaListManager
{
 public static AlphaList createList()
 {
  //some code to create an object
 }
}
AlphaList Manager AlphaListManager adalah kelas dalam kerangka kerja. Metode createList-nya membuatobjek AlphaList
interface BetaList
{
 int getValue(int index);
 void setValue(int index, int value);
 int getSize();
 void setSize(int newSize);
}
class BetaSaveManager
{
 public static void saveList(BetaList list)
 {
  //some code to save a BetaList object
  //to a file on disk
 }
}
Kode dari kerangka kedua ( Beta ).

BetaList adalah salah satu antarmuka yang memungkinkan kode framework berinteraksi dengan kode yang menggunakan framework.

BetaSaveManager adalah kelas dalam kerangka kerja. Metode saveList -nyamenyimpanobjek BetaList

class ListAdapter implements BetaList
{
 private AlphaList list;
 ListAdapter(AlphaList list)
 {
  this.list = list;
 }

 int getValue(int index)
 {
  return this.list.get(index);
 }

 void setValue(int index, int value)
 {
  this.list.set(index, value);
 }

 int getSize()
 {
  return this.list.count();
 }

 void setSize(int newSize)
 {
  if (newSize > this.list.count()
  {
   while (this.list.count() < newSize)
  {
   this.list.add(null);
  }
 }
 else if (newSize < this.list.count() {
   while (this.list.count() > newSize)
   {
    list.remove(list.count() - 1);
   }
  }
 }
}
Kelas «Adapter» yang mengonversi dari antarmuka AlphaList ke antarmuka BetaList

Kelas ListAdapter mengimplementasikan antarmuka BetaList dari kerangka kerja kedua.

Saat seseorang memanggil metode ini, kode kelas «meneruskan» panggilan ke variabel daftar , yang merupakan AlphaList dari kerangka kerja pertama.

Objek AlphaList diteruskan ke konstruktor ListAdapter

Metode setSize beroperasi menurut aturan berikut: jika ukuran daftar harus ditambah, tambahkan item kosong (null). Jika ukuran daftar perlu dikurangi, hapus item di bagian akhir.

public static void main(String[] args)
{
 AlphaList listAlpha = AlphaListManager.createList();
 BetaList listBeta = new ListAdapter(listAlpha);
 BetaSaveManager.saveList(listBeta);
}
Contoh bagaimana itu bisa digunakan

"Saya paling menyukai contoh terakhir Anda. Sangat ringkas dan mudah dipahami."