মুখ এবং অ্যাডাপ্টার প্যাটার্নের মধ্যে পার্থক্য কী?


উত্তর:


142

ছদ্মরূপ প্যাটার্ন উইকি পৃষ্ঠাটি এই সম্পর্কে একটি সংক্ষিপ্ত নোট হয়েছে।

"একটি অ্যাডাপ্টার ব্যবহার করা হয় যখন মোড়ক অবশ্যই একটি নির্দিষ্ট ইন্টারফেসকে সম্মান করে এবং একটি পলিমারফিক আচরণকে সমর্থন করে the অন্যদিকে, যখন একটি কাজ করার জন্য একটি সহজ বা সহজ ইন্টারফেস চায় তখন একটি মুখোমুখি ব্যবহার করা হয়।"

আমি একটি উপমা শুনেছি যা আপনার সর্বজনীন রিমোট কন্ট্রোলের কথা ভাবার উচিত যা আপনি আপনার সমস্ত বিভিন্ন স্টেরিও সিস্টেমের সাথে কাজ করার জন্য স্থাপন করেছেন - আপনি "চালু" চাপুন এবং এটি আপনার কেবল বাক্স, আপনার রিসিভার এবং আপনার টিভি চালু করে। হতে পারে এটি সত্যিই অভিনব হোম থিয়েটার এবং এটি আলোককে অন্ধকার দেয় এবং শেডগুলিও আঁকবে। এটি একটি মুখোমুখি - একটি বোতাম / ফাংশন যা আরও জটিল ধাপের সেটটি যত্ন করে।

অ্যাডাপ্টার প্যাটার্নটি কেবল দুটি বেমানান ইন্টারফেসের সাথে লিঙ্ক করে।

সম্পাদনা: অ্যাডাপ্টার প্যাটার্নের জন্য একটি দ্রুত সাদৃশ্য (মন্তব্যের ভিত্তিতে) ডিভিআই-থেকে-ভিজিএ অ্যাডাপ্টারের মতো কিছু হতে পারে। আধুনিক ভিডিও কার্ডগুলি প্রায়শই ডিভিআই হয় তবে আপনি একটি পুরানো ভিজিএ মনিটর পেয়েছেন। এমন একটি অ্যাডাপ্টার যা আপনার ভিডিও কার্ডের প্রত্যাশিত ডিভিআই ইনপুটটিতে প্লাগ ইন করে এবং তার নিজস্ব ভিজিএ ইনপুট রয়েছে, আপনি আপনার নতুন ভিডিও কার্ডের সাথে আপনার পুরানো মনিটরকে কাজ করতে সক্ষম হবেন।


4
রিমোট কন্ট্রোল ব্যবহার করে দুর্দান্ত উপমা। অ্যাডাপ্টারের প্যাটার্নের ব্যাখ্যাটি ঠিক আছে তবে একই ধরণের উপমা নিয়ে আসাই দুর্দান্ত হবে।
কেভিন লে - খনলে

2
সত্যিই দুর্দান্ত উপমা! অ্যাডাপ্টার প্যাটার্নের একটি আসল বিশ্ব জাভা উদাহরণ এটি আরও ভালভাবে বুঝতে সাহায্য করতে পারে: InputStreamReaderকোনটি অ্যাডাপ্ট InputStreamকরে Readerএবং OutputStreamWriterকোনটি উভয়কেই অ্যাডাপ্ট OutputStreamকরে Writerযা বিভিন্ন বিমূর্ত প্রকারের।
বালাসসি

1
@ খনলে - অ্যাডাপ্টারের প্যাটার্ন অ্যাকশন: আপলোড.উইকিমিডিয়া.আর
//৮০/

@ খনলে - একটি অ্যাডাপ্টার উপমাতে যুক্ত করা (ব্যক্তিগত অভিজ্ঞতার ভিত্তিতে)। @ এরিক - অনুপ্রেরণা এবং দুর্দান্ত ছবিটির জন্য ধন্যবাদ! @ বালুসসি - বাস্তব বিশ্বের উদাহরণের জন্য ভাল কল।
awshepard

@ বালুসসি - আমি আপনার উদাহরণটিও পছন্দ করি। ভাগ্যক্রমে আমি জাভা জানি। @ এরিক পেট্রোলেজে - একটি ছবির হাজার হাজার শব্দের মূল্য রয়েছে :-) @ ওয়াশপার্ড - আমি প্রোগ্রামিং না করলে, আমি এখন
আপনাকেও

125

অ্যাডাপ্টার == একটি বৃত্তাকার খোসা গোলাকার গর্তে ফিট করে।

সম্মুখস্থ == অভ্যন্তরীণ সমস্ত উপাদান চালানোর জন্য একটি একক নিয়ন্ত্রণ প্যানেল।


8
এই উত্তর নিখুঁত হয়ে নিস্তেজ! আমি আমার প্যাটার্ন নোটগুলিতে এটি অন্তর্ভুক্ত করছি। :)
জোশুয়া ডেল

1
সরলতায় মহানতা
এ-ম্যান

20

সত্যিই, অনেক নিদর্শন একইভাবে প্রোগ্রামে প্রয়োগ করা যেতে পারে - পার্থক্য উদ্দেশ্য মধ্যে।

অ্যাডাপ্টার ডিজাইন প্যাটার্নটি বোঝায় ক্লায়েন্টটি ব্যবহারের প্রত্যাশা এক বা একাধিক ক্লাসের ইন্টারফেসটিকে 'অনুবাদ' করে - অ্যাডাপ্টারের কলগুলি প্রত্যাশিত ইন্টারফেসে আসল ইন্টারফেসে আবৃত ক্লাসগুলি ব্যবহার করে transla

যখন একটি সহজ ইন্টারফেস চাওয়া হয় তখন ফেকাড প্যাটার্নটি ব্যবহৃত হয় (এবং আবারও আপত্তিকর ক্লাসগুলি মোড়ানো দ্বারা একইভাবে প্রয়োগ করা যেতে পারে)) আপনি যখন বলবেন না যে আপনি যখন প্রয়োজন তখন কেবল ইন্টারফেসটি বেমানান নয় যখন আপনি প্রয়োজন হবে এটিকে আরও পঠনযোগ্য, কম খারাপ নকশাকৃত ইত্যাদি তৈরি করা


18

ছদ্মরূপ:

মূল গ্রহণযোগ্যতা: ( পঙ্কজ কুমারের জার্নালদেব নিবন্ধ থেকে )

  1. মুখোমুখি নিদর্শন ক্লায়েন্ট অ্যাপ্লিকেশনগুলির জন্য সহায়ক হিসাবে আরও বেশি
  2. সম্মুখের প্যাটার্নটি বিকাশের যে কোনও সময়ে প্রয়োগ করা যেতে পারে, সাধারণত যখন ইন্টারফেসের সংখ্যা বৃদ্ধি পায় এবং সিস্টেম জটিল হয়
  3. সাবসিস্টেম ইন্টারফেসগুলি ফেকাড সম্পর্কে সচেতন নয় এবং তাদের ফেকাড ইন্টারফেসের কোনও উল্লেখ থাকতে হবে না
  4. অনুরূপ ধরণের ইন্টারফেসের জন্য মুখোমুখি প্যাটার্ন প্রয়োগ করা উচিত , এর উদ্দেশ্য একই ধরণের কাজগুলি করে এমন একাধিক ইন্টারফেসের চেয়ে একটি একক ইন্টারফেস সরবরাহ করা is

মুখোমুখি শ্রেণীর চিত্র:

এখানে চিত্র বর্ণনা লিখুন

নাটক:

  1. এটি একটি কাঠামোগত নিদর্শন
  2. দুটি বেমানান ইন্টারফেসের সাথে কাজ করা কার্যকর
  3. এটি ডিজাইন করার পরে জিনিসগুলিকে কাজ করে তোলে

অ্যাডাপ্টারের শ্রেণি চিত্র:

এখানে চিত্র বর্ণনা লিখুন

আপনি এই এসই পোস্টে অ্যাডাপ্টার সম্পর্কে আরও বিশদ জানতে পারেন:

ব্রিজ প্যাটার্ন এবং অ্যাডাপ্টার প্যাটার্নের মধ্যে পার্থক্য

মূল পার্থক্য:

  1. ফেসিড একটি নতুন ইন্টারফেস সংজ্ঞায়িত করে, যেখানে অ্যাডাপ্টার একটি পুরানো ইন্টারফেস ব্যবহার করে । সম্পূর্ণ নতুন একটি সংজ্ঞায়নের বিপরীতে অ্যাডাপ্টার দুটি বিদ্যমান ইন্টারফেস একসাথে কাজ করে তোলে
  2. অ্যাডাপ্টার এবং মুখোমুখি উভয় র‌্যাপার; তবে এগুলি বিভিন্ন ধরণের মোড়কজাতীয়। ফেকাডের উদ্দেশ্যটি একটি সহজ ইন্টারফেস তৈরি করা এবং অ্যাডাপ্টারের উদ্দেশ্যটি একটি বিদ্যমান ইন্টারফেসের জন্য ডিজাইন করা

আরও ভাল বোঝার জন্য উত্স তৈরির নিবন্ধটি একবার দেখুন ।


ডায়াগ্রাম দেখতে ভালোবাসি! যদিও কিছু স্পষ্টতা রয়েছে, যখন আমি পরামিতিগুলির সংখ্যা / ধরণের পরিবর্তন করি তখন এর অর্থ কি এটি আর অ্যাডাপ্টার নয়? মত someMethod(int year, int month) অর্পণ করা হয়েছিল someMethod(DateTime start, DateTime end)বা দেয় বলে someMethod()অর্পণsomeMethod(T param)
জেইমি Sangcap

উভয় পদ্ধতি যদি একই শ্রেণিতে থাকে তবে এটিকে ওভারলোডিং বলা হয়। তারা যদি বিভিন্ন শ্রেণিতে থাকে তবে অ্যাডাপ্টার এবং অ্যাডাপ্টির সম্পর্কটি প্রয়োগ করা হলে এটি অ্যাডপ্যাটার হতে পারে
রবীন্দ্র বাবু

সত্যিই দুর্দান্ত ব্যাখ্যা।
ডুক ফিলান

14

একটি মুখোমুখি একক পরিষেবা গেটওয়ের পিছনে একাধিক পরিষেবা সংগঠিত করার জন্য ডিজাইন করা হয়েছে। একটি অ্যাডাপ্টার একটি অজানা অ্যাক্সেস জন্য পরিচিত ইন্টারফেস ব্যবহার করার একটি উপায় প্রদান করার জন্য ডিজাইন করা হয়েছে।



8

মুখোমুখি সাধারণত অ্যাডাপ্টারের সাথে বিপরীতে থাকে।

+--------------------------------------------------------------+-----------------------------------------------+
|                            Facade                            |                    Adapter                    |
+--------------------------------------------------------------+-----------------------------------------------+
| Simplifies multiple complex components with single interface | Provides differnet interface for an interface |
| Works with multiple components                               | Works with single component                   |
| Control panel is an example                                  | A power adapter is an example                 |
| High-level interface                                         | Low-level interface                           |
+--------------------------------------------------------------+-----------------------------------------------+

4

যথারীতি, বেশ কয়েকটি নিদর্শনগুলির মধ্যে মিল রয়েছে। তবে আমি এটি দেখতে চাই:

  • একটি ফেইসড একটি সম্পূর্ণ স্তরকে আবদ্ধ করতে ব্যবহার করা হয় এবং এটি "সুবিধার্থে" অ্যাক্সেসের জন্য কিছু পদ্ধতি সরবরাহ করে
  • একটি অ্যাডাপ্টার ব্যবহার করা হয়, যেখানে আপনার দুটি উপাদান রয়েছে যা ইতিমধ্যে একসাথে কাজ করা উচিত, তবে কেবল ইন্টারফেসে কিছু "গুরুত্বহীন" পার্থক্যের কারণে নয়।

1
ভাল ব্যাখ্যা। অ্যাডাপ্টারের বর্ণনা দেওয়ার সময় এই প্রথম আমি "গুরুত্বহীন পার্থক্য" শব্দটি পেলাম, যা বাস্তবে সত্য
সুদারা

4

আমি খুব আনুষ্ঠানিকতা ছাড়াই, সরল কথায় এটি ব্যাখ্যা করার চেষ্টা করব।

কল্পনা করুন যে আপনি কিছু ডোমেন ক্লাস পেয়েছেন এবং ইউআই থেকে আপনি তাদের সাথে ইন্টারঅ্যাক্ট করতে চান। UI স্তর থেকে ডাকা যেতে পারে এমন ফাংশন সরবরাহ করতে একটি ফ্যাসাদ ব্যবহার করা যেতে পারে যাতে ইউআই স্তরটি ফ্যাসাদ ছাড়া অন্য কোনও ডোমেন ক্লাস সম্পর্কে জানতে না পারে। এর অর্থ ডোমেন ক্লাসে ফাংশনগুলি কল করার পরিবর্তে আপনি মুখোমুখি থেকে একটি একক ফাংশন কল করেন যা অন্যান্য শ্রেণি থেকে প্রয়োজনীয় ফাংশনগুলি কল করার জন্য দায়বদ্ধ হবে।

অন্যদিকে, একটি অ্যাডাপ্টার অন্য বাহ্যিক উপাদানগুলিকে সংহত করতে ব্যবহার করা যেতে পারে যা আপনার প্রয়োজন একই কার্যকারিতা থাকতে পারে তবে তাদের ফাংশনগুলিকে একেবারে একইভাবে বলা হয় না। বলুন যে আপনি Carআপনার ডোমেনে একটি ক্লাস পেয়েছেন এবং আপনি একটি বাহ্যিক গাড়ি সরবরাহকারীর সাথে কাজ করেন যার একটি গাড়ী শ্রেণীর সংজ্ঞাও রয়েছে। এই শ্রেণিতে, আপনি ফাংশনটি পেয়েছেন car.getDoors()তবে বহিরাগত সরবরাহকারীর সমতুল্য রয়েছে car.getNumDoors()। আপনি এই ফাংশনটি কল করার উপায়টি পরিবর্তন করতে চান না, সুতরাং আপনি বাহ্যিক গাড়ী শ্রেণিটি মোড়ানোর জন্য একটি অ্যাডাপ্টারের ক্লাস ব্যবহার করতে পারেন যাতে অ্যাডাপ্টারের কলটি বাহ্যিক শ্রেণীর getDoors()কাছে অর্পিত হয় getNumDoors()


3

অ্যাডাপ্টার প্যাটার্ন দুটি, পূর্বে বেমানান ইন্টারফেস একে অপরের সাথে কাজ করার অনুমতি দেয়। খেলতে 2 পৃথক ইন্টারফেস রয়েছে।

মুখের প্যাটার্নটি একটি পরিচিত ইন্টারফেস নেয় যা নিম্ন স্তরের / সূক্ষ্ম দানযুক্ত এবং এটি একটি উচ্চ স্তরের / কোর্স গ্রেড ইন্টারফেসের সাথে আবৃত করে। একটি একক ইন্টারফেস রয়েছে, যা অন্যের সাথে মোড়ানো দ্বারা সরল করা হয়েছে।


3

অ্যাডাপ্টার দুটি ইন্টারফেস একসাথে কাজ করে তোলে।

ফেকাড একক শ্রেণিকে উচ্চতর এবং আরও সীমিত স্তরে প্রকাশিত করে। উদাহরণস্বরূপ, একটি ভিউ মডেল ফেইস কেবল নিম্ন স্তরের শ্রেণীর নির্দিষ্ট পঠনযোগ্য বৈশিষ্ট্যগুলি কেবল প্রকাশ করতে পারে।


1

অট্টালিকার সদরের বহির্ভাগ

একটি সহজ ইন্টারফেস সরবরাহ করতে জটিলতার বিমূর্ততা। উদাহরণস্বরূপ বলুন, একটি কম্পিউটার ওএস অন্তর্নিহিত হার্ডওয়্যারের জটিলতা বিমূর্ত করে। বা একটি উচ্চ-স্তরের প্রোগ্রামিং ভাষা (পাইথন / জাভাস্ক্রিপ্ট) যখন নিম্ন-স্তরের ভাষা (সি) এর সাথে তুলনা করা হয় তখন জটিলতা বিমূর্ত করে তোলে।

এডাপটার

এটি একটি হার্ডওয়্যার অ্যাডাপ্টারগুলির অ্যানালগগুলি। আপনি যদি একটি সংযুক্ত করতে চান বলুন USB deviceএকটি থেকে serial port, আপনি একটি প্রয়োজন হবে USB-serial port adapter


1

অ্যাডাপ্টার প্যাটার্ন একটি নতুন ইন্টারফেস সরবরাহ করে দুটি বেমানান ইন্টারফেস লিঙ্ক।

মুখোমুখি প্যাটার্ন একটি একক ইন্টারফেসের মাধ্যমে একটি জটিল সাবসিস্টেমকে (একাধিক উপাদানযুক্ত) সহজ করে।


1

এই দুটি নিদর্শনগুলির মধ্যে পার্থক্য স্পষ্ট, তবে ডিজাইন প্যাটার্নগুলির ক্ষেত্রে নয়, তবে ডোমেন মডেলিং। নীচে, আমি কেন তা ব্যাখ্যা করব।

প্রথমে, আমি অন্যদের এখানে পুনর্বিবেচনা করতে চাই এবং তারপরে আমি নোটটি যুক্ত করব:

একটি মুখোমুখি একটি সাবসিস্টেমের একটি ইন্টারফেস (একটি বাহ্যিক বা একটি উত্তরাধিকার ব্যবস্থা) যা ক্লায়েন্টের (আমাদের) অ্যাক্সেসকে সহজতর করে। ফেকাড অন্য সাবসিস্টেমের ইন্টারফেসটি গোপন করে (কিছু কলগুলি সংযুক্ত করে, বা আমাদের প্রয়োজন হয় না এমন কয়েকটি API লুকিয়ে রাখে), এইভাবে আপনার ক্লায়েন্ট কেবল এই ফ্যাসাদের মাধ্যমে সাবসিস্টেমটিতে অ্যাক্সেস করে।

অন্যদিকে, অ্যাডাপ্টার হ'ল অন্য পরিষেবা বা বস্তুর চারপাশে একটি মোড়ক। এটি মোড়ানো বস্তুকে একটি স্ট্যান্ডার্ড ইন্টারফেসের সাথে মানিয়ে তোলে যা ক্লায়েন্টের প্রত্যাশা। আসুন ধরে নেওয়া যাক "লেজার" অবজেক্টে একটি পদ্ধতি রয়েছে, যা আপনাকে একটি টুইট করতে হবে (এর পরামিতিগুলি পরিবর্তন করুন, এর নাম পরিবর্তন করুন ইত্যাদি)। আপনি এটি একটি অ্যাডাপ্টার দিয়ে মোড়ানো করতে পারেন।

এখন, তফাতটি এখনও পরিষ্কার হতে পারে না। এখানেই আমি এই দুটি প্যাটার্নের মধ্যে মূল পার্থক্যটি সামনে আনতে চাই যেখানে আরও বিভ্রান্তির কোন জায়গা নেই :

ফেসিড অন্য সাবসিস্টেমের ডোমেন মডেলটি পরিবর্তন করে না, যখন অ্যাডাপ্টারটি করে। এটিই মূল পার্থক্য। সময়কাল।

এজন্যই যখন আপনি একটি অ্যান্টিকার্পশন লেয়ার তৈরি করেন তখন আপনি এই দুটি সংযুক্ত করে । ধরা যাক যে আপনি ব্যবহার করতে চান এমন সাবসিস্টেম রয়েছে তবে আপনি এটির ডোমেন মডেলটি আপনার ডোমেন মডেলকে গোলমাল করতে চান না। আপনি কি করতে চান? আপনি একটি দুর্নীতি স্তর তৈরি করতে চাই। কিভাবে? আপনি প্রথমে একটি ফ্যাসাদ তৈরি করেন, যা সাবসিস্টেমের জন্য ইন্টারফেস অ্যাক্সেসকে সহজতর করে এবং তারপরে সেই ইন্টারফেসে ব্যবহৃত ডোমেন অবজেক্টের জন্য অ্যাডাপ্টারগুলি (মনে রাখবেন যে মুখোশটি এখনও অন্য সাবসিস্টেমের জন্য ডোমেন মডেল ধারণ করে) তাই এটি আপনার মডেলের সাথে খাপ খায়।

ডোমেন মডেলিংয়ে অনেকগুলি নকশার নিদর্শন ব্যবহার করা যেতে পারে। এটি মুখোমুখি এবং অ্যাডাপ্টারের নকশার ধরণগুলির জন্যও সত্য। যদিও এই দুটি নিদর্শনগুলির মধ্যে পার্থক্য "ডিজাইনের ধরণ" রাজ্যে পরিষ্কার নাও হতে পারে, তবে এটি "ডোমেন মডেলিং" রাজ্যে আরও স্পষ্ট।


0

আমি উভয় সংজ্ঞা পড়ছি এবং সেগুলি বেশ একরকম বলে মনে হচ্ছে।

সত্যি?

আমি লক্ষ্য করেছি যে অ্যাডাপ্টার শব্দটি মাঝে মাঝে বাস্তবে একটি স্ট্যাটগি কী তা বর্ণনা করতে ব্যবহৃত হয় , কারণ শব্দটি আরও স্পষ্টবাদী is

উদাহরণস্বরূপ, জেন্ডার ফ্রেমওয়ার্কে সমস্ত অ্যাডাপ্টারের ক্লাসগুলি আসলে স্ট্র্যাটেজি প্যাটার্নের বাস্তবায়ন , কারণ তারা বেশ কয়েকটি আচরণের জন্য কেবল শ্রেণির পিছনে নেটিভ কোডটি আবদ্ধ করে।

অ্যাডাপ্টারগুলি প্রায়শই উত্তরাধিকার বা "পুরানো-শৈলী" কোড মোড়ানোর জন্য ব্যবহৃত হয়।


0

ফ্যাসাড প্যাটার্নের প্রধান লক্ষ্যটি ক্লাস বা সাবসিস্টেমটি ব্যবহার করা সহজতর করা, যখন অ্যাডাপ্টার প্যাটার্নের প্রধান লক্ষ্য ক্লায়েন্টের প্রত্যাশা অনুযায়ী ইন্টারফেসটি সামঞ্জস্য করা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.