"হ্যালো, অ্যামিগো! আজ আমি আপনাকে বলবো একটি « অ্যাডাপ্টার » আসলে কী। আমি আশা করি এই বিষয় সম্পর্কে জানার পর আপনি ইনপুট/আউটপুট স্ট্রীম সম্পর্কে আরও ভালোভাবে বুঝতে পারবেন।"

অ্যাডাপ্টার - 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 Manager AlphaListManager হল ফ্রেমওয়ার্কের একটি ক্লাস। এর createList পদ্ধতি একটি 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
 }
}
দ্বিতীয় ( বিটা ) ফ্রেমওয়ার্ক থেকে কোড।

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);
}
এটি কীভাবে ব্যবহার করা যেতে পারে তার একটি উদাহরণ

"আমি আপনার শেষ উদাহরণটি সবচেয়ে পছন্দ করেছি। খুব সংক্ষিপ্ত এবং বোধগম্য।"