"Kumusta, Amigo! Ngayon sasabihin ko sa iyo kung ano ang eksaktong « adapter ». Umaasa ako na pagkatapos mong malaman ang tungkol sa paksang ito ay magkakaroon ka ng mas mahusay na pag-unawa sa mga input/output stream."

Mga adaptor - 1

Isipin na ang iyong programa ay gumagamit ng dalawang balangkas na isinulat ng ibang mga programmer/kumpanya. Ang parehong mga balangkas ay napakahusay at gumagamit ng mga prinsipyo ng OOP: abstraction, polymorphism, encapsulation. Magkasama, halos ganap nilang saklawin kung ano ang kailangang gawin ng iyong programa. Naiwan ka sa isang simpleng gawain. Kailangan mong ipasa ang mga bagay na nilikha ng isang balangkas sa kabilang balangkas. Ngunit ang parehong mga balangkas ay ganap na naiiba at "hindi alam ang tungkol sa isa't isa", ibig sabihin, wala silang anumang mga klase sa karaniwan. Kailangan mong kahit papaano ay i-convert ang mga bagay ng isang balangkas sa mga bagay ng isa pa.

Ang gawaing ito ay maaaring maayos na malulutas sa pamamagitan ng paglalapat ng " adapter " na pamamaraan (design pattern):

Java code Paglalarawan
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
}
Sinasalamin nito ang pattern ng disenyo ng adaptor.

Ang pangunahing ideya ay ang klase ng MyClass ay nagko-convert (nag-aangkop) ng isang interface sa isa pa.

"Maaari mo ba akong bigyan ng mas tiyak na halimbawa?"

"OK. Sabihin nating ang bawat framework ay may sariling natatanging "listahan" na interface. Maaaring ganito ang hitsura nila:"

Java code Paglalarawan
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);
}
Code mula sa unang ( Alpha ) na balangkas

Ang AlphaList ay isa sa mga interface na nagbibigay-daan sa framework code na makipag-ugnayan sa code na gumagamit ng framework.

class AlphaListManager
{
 public static AlphaList createList()
 {
  //some code to create an object
 }
}
AlphaList Manager Ang AlphaListManager ay isang klase sa framework. Ang paraan ng createList ay lumilikha ng isangbagay na 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
 }
}
Code mula sa pangalawang ( Beta ) na balangkas.

Ang BetaList ay isa sa mga interface na nagbibigay-daan sa framework code na makipag-ugnayan sa code na gumagamit ng framework.

Ang BetaSaveManager ay isang klase sa framework. Ang paraan ng saveList nitobagay na 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);
   }
  }
 }
}
Class na «Adapter» na nagko-convert mula sa AlphaList interface patungo sa BetaList interface

Ipinapatupad ng klase ng ListAdapter ang interface ng BetaList mula sa pangalawang balangkas.

Kapag may tumawag sa mga pamamaraang ito, ang class code na «forward» ang mga tawag sa list variable, na isang AlphaList mula sa unang framework.

Ang isang AlphaList object ay ipinasa sa ListAdapter constructor

Ang paraan ng setSize ay gumagana ayon sa mga sumusunod na panuntunan: kung ang laki ng listahan ay dapat na dagdagan, magdagdag ng mga walang laman (null) na item. Kung kailangang bawasan ang laki ng listahan, tanggalin ang mga item sa dulo.

public static void main(String[] args)
{
 AlphaList listAlpha = AlphaListManager.createList();
 BetaList listBeta = new ListAdapter(listAlpha);
 BetaSaveManager.saveList(listBeta);
}
Isang halimbawa kung paano ito magagamit

"Nagustuhan ko ang iyong huling halimbawa higit sa lahat. Napaka-concise at naiintindihan."