"హలో, అమిగో! ఈ రోజు నేను మీకు ఖచ్చితంగా « అడాప్టర్ » అంటే ఏమిటో చెబుతాను . ఈ అంశం గురించి తెలుసుకున్న తర్వాత మీరు ఇన్‌పుట్/అవుట్‌పుట్ స్ట్రీమ్‌ల గురించి మరింత మెరుగ్గా అర్థం చేసుకుంటారని నేను ఆశిస్తున్నాను."

అడాప్టర్లు - 1

మీ ప్రోగ్రామ్ ఇతర ప్రోగ్రామర్లు/కంపెనీలు వ్రాసిన రెండు ఫ్రేమ్‌వర్క్‌లను ఉపయోగిస్తుందని ఊహించుకోండి. రెండు ఫ్రేమ్‌వర్క్‌లు చాలా బాగున్నాయి మరియు 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
}
ఇది అడాప్టర్ డిజైన్ నమూనాను ప్రతిబింబిస్తుంది.

ప్రాథమిక ఆలోచన ఏమిటంటే, MyClass తరగతి ఒక ఇంటర్‌ఫేస్‌ను మరొకదానికి మారుస్తుంది (అడాప్ట్ చేస్తుంది).

"మీరు నాకు మరింత నిర్దిష్ట ఉదాహరణ ఇవ్వగలరా?"

"సరే. ప్రతి ఫ్రేమ్‌వర్క్‌కి దాని స్వంత ప్రత్యేకమైన "జాబితా" ఇంటర్‌ఫేస్ ఉందని చెప్పండి. అవి ఇలా ఉండవచ్చు:"

జావా కోడ్ వివరణ
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
 }
}
AlphaList మేనేజర్ AlphaListManager అనేది ఫ్రేమ్‌వర్క్‌లోని ఒక తరగతి. దీని క్రియేట్‌లిస్ట్ పద్ధతి ఆల్ఫాలిస్ట్ ఆబ్జెక్ట్‌ను
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
 }
}
రెండవ ( బీటా ) ఫ్రేమ్‌వర్క్ నుండి కోడ్.

ఫ్రేమ్‌వర్క్ కోడ్‌ను ఫ్రేమ్‌వర్క్‌ను ఉపయోగించే కోడ్‌తో పరస్పర చర్య చేయడానికి అనుమతించే ఇంటర్‌ఫేస్‌లలో బీటాలిస్ట్ ఒకటి.

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 తరగతి రెండవ ఫ్రేమ్‌వర్క్ నుండి బీటాలిస్ట్ ఇంటర్‌ఫేస్‌ను అమలు చేస్తుంది.

ఎవరైనా ఈ పద్ధతులను పిలిచినప్పుడు, క్లాస్ కోడ్ «ఫార్వర్డ్స్» జాబితా వేరియబుల్‌కు కాల్ చేస్తుంది, ఇది మొదటి ఫ్రేమ్‌వర్క్ నుండి ఆల్ఫాలిస్ట్ .

ఆల్ఫాలిస్ట్ ఆబ్జెక్ట్ లిస్ట్ అడాప్టర్ కన్స్ట్రక్టర్‌కు పంపబడుతుంది

setSize పద్ధతి క్రింది నియమాల ప్రకారం పనిచేస్తుంది: జాబితా పరిమాణాన్ని తప్పనిసరిగా పెంచినట్లయితే, ఖాళీ (శూన్య) అంశాలను జోడించండి . జాబితా పరిమాణాన్ని తగ్గించాల్సిన అవసరం ఉంటే, చివరిలో అంశాలను తొలగించండి.

public static void main(String[] args)
{
 AlphaList listAlpha = AlphaListManager.createList();
 BetaList listBeta = new ListAdapter(listAlpha);
 BetaSaveManager.saveList(listBeta);
}
దీన్ని ఎలా ఉపయోగించవచ్చో ఉదాహరణ

"మీ చివరి ఉదాహరణ నాకు చాలా నచ్చింది. చాలా సంక్షిప్తంగా మరియు అర్థమయ్యేలా ఉంది."