"हॅलो, अमिगो! आज मी तुम्हाला सांगेन की « अॅडॉप्टर » म्हणजे नेमके काय आहे. मला आशा आहे की या विषयाबद्दल शिकल्यानंतर तुम्हाला इनपुट/आउटपुट प्रवाहांची अधिक चांगली समज असेल."

अडॅप्टर - १

कल्पना करा की तुमचा प्रोग्राम इतर प्रोग्रामर/कंपन्यांनी लिहिलेल्या दोन फ्रेमवर्कचा वापर करतो. दोन्ही फ्रेमवर्क खूप चांगले आहेत आणि OOP तत्त्वे वापरतात: अॅब्स्ट्रॅक्शन, पॉलीमॉर्फिझम, एन्कॅप्सुलेशन. एकत्रितपणे, आपल्या प्रोग्रामला काय करण्याची आवश्यकता आहे ते ते जवळजवळ पूर्णपणे कव्हर करतात. तुमच्याकडे एक साधे कार्य बाकी आहे. तुम्हाला एका फ्रेमवर्कने तयार केलेल्या वस्तू दुसऱ्या फ्रेमवर्कमध्ये पास करणे आवश्यक आहे. परंतु दोन्ही फ्रेमवर्क पूर्णपणे भिन्न आहेत आणि "एकमेकांबद्दल माहित नाही", म्हणजे त्यांच्यात कोणतेही वर्ग सामाईक नाहीत. तुम्हाला एका फ्रेमवर्कच्या वस्तू दुसऱ्याच्या वस्तूंमध्ये रूपांतरित करणे आवश्यक आहे.

हे कार्य " अॅडॉप्टर " तंत्र (डिझाइन पॅटर्न) लागू करून सुंदरपणे सोडवले जाऊ शकते :

जावा कोड वर्णन
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
}
हे अडॅप्टर डिझाइन नमुना प्रतिबिंबित करते.

मूळ कल्पना अशी आहे की मायक्लास वर्ग एका इंटरफेसला दुसर्‍या इंटरफेसमध्ये रूपांतरित करतो (अनुकूल करतो).

"तुम्ही मला आणखी विशिष्ट उदाहरण देऊ शकता का?"

"ठीक आहे. समजा की प्रत्येक फ्रेमवर्कचा स्वतःचा अनन्य "सूची" इंटरफेस असतो. ते कदाचित यासारखे दिसू शकतात:"

जावा कोड वर्णन
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);
}
पहिल्या ( अल्फा ) फ्रेमवर्कमधील कोड

अल्फालिस्ट हे इंटरफेसपैकी एक आहे जे फ्रेमवर्क कोडला फ्रेमवर्क वापरणाऱ्या कोडशी संवाद साधण्याची परवानगी देते.

class AlphaListManager
{
 public static AlphaList createList()
 {
  //some code to create an object
 }
}
अल्फालिस्ट मॅनेजर अल्फालिस्ट मॅनेजर हा फ्रेमवर्कमधील एक वर्ग आहे. त्याची createList पद्धत अल्फालिस्ट ऑब्जेक्ट
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
 }
}
दुसऱ्या ( बीटा ) फ्रेमवर्कमधील कोड.

BetaList हे इंटरफेसपैकी एक आहे जे फ्रेमवर्क कोडला फ्रेमवर्क वापरणाऱ्या कोडशी संवाद साधण्याची परवानगी देते.

BetaSaveManager हा फ्रेमवर्कमधील एक वर्ग आहे. त्याची saveList पद्धत 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);
   }
  }
 }
}
"अॅडॉप्टर" वर्ग जो अल्फालिस्ट इंटरफेसमधून बीटालिस्ट इंटरफेसमध्ये रूपांतरित होतो

ListAdapter वर्ग दुसऱ्या फ्रेमवर्कमधून BetaList इंटरफेस लागू करतो .

जेव्हा कोणीतरी या पद्धतींवर कॉल करते, तेव्हा क्लास कोड "फॉरवर्ड" सूची व्हेरिएबलवर कॉल करतो, जे पहिल्या फ्रेमवर्कमधील अल्फालिस्ट आहे.

AlphaList ऑब्जेक्ट ListAdapter कन्स्ट्रक्टरला पास केले जाते

सेटसाइज पद्धत खालील नियमांनुसार कार्य करते: जर सूचीचा आकार वाढवायचा असेल तर, रिक्त (शून्य) आयटम जोडा . सूचीचा आकार कमी करणे आवश्यक असल्यास, शेवटी आयटम हटवा.

public static void main(String[] args)
{
 AlphaList listAlpha = AlphaListManager.createList();
 BetaList listBeta = new ListAdapter(listAlpha);
 BetaSaveManager.saveList(listBeta);
}
ते कसे वापरले जाऊ शकते याचे उदाहरण

"मला तुझे शेवटचे उदाहरण सर्वात जास्त आवडले. अतिशय संक्षिप्त आणि समजण्यासारखे."