আমি উভয় সংজ্ঞা পড়ছি এবং সেগুলি বেশ একরকম বলে মনে হচ্ছে। তাদের পার্থক্য কি কি কেউ চিহ্নিত করতে পারে?
ধন্যবাদ
আমি উভয় সংজ্ঞা পড়ছি এবং সেগুলি বেশ একরকম বলে মনে হচ্ছে। তাদের পার্থক্য কি কি কেউ চিহ্নিত করতে পারে?
ধন্যবাদ
উত্তর:
ছদ্মরূপ প্যাটার্ন উইকি পৃষ্ঠাটি এই সম্পর্কে একটি সংক্ষিপ্ত নোট হয়েছে।
"একটি অ্যাডাপ্টার ব্যবহার করা হয় যখন মোড়ক অবশ্যই একটি নির্দিষ্ট ইন্টারফেসকে সম্মান করে এবং একটি পলিমারফিক আচরণকে সমর্থন করে the অন্যদিকে, যখন একটি কাজ করার জন্য একটি সহজ বা সহজ ইন্টারফেস চায় তখন একটি মুখোমুখি ব্যবহার করা হয়।"
আমি একটি উপমা শুনেছি যা আপনার সর্বজনীন রিমোট কন্ট্রোলের কথা ভাবার উচিত যা আপনি আপনার সমস্ত বিভিন্ন স্টেরিও সিস্টেমের সাথে কাজ করার জন্য স্থাপন করেছেন - আপনি "চালু" চাপুন এবং এটি আপনার কেবল বাক্স, আপনার রিসিভার এবং আপনার টিভি চালু করে। হতে পারে এটি সত্যিই অভিনব হোম থিয়েটার এবং এটি আলোককে অন্ধকার দেয় এবং শেডগুলিও আঁকবে। এটি একটি মুখোমুখি - একটি বোতাম / ফাংশন যা আরও জটিল ধাপের সেটটি যত্ন করে।
অ্যাডাপ্টার প্যাটার্নটি কেবল দুটি বেমানান ইন্টারফেসের সাথে লিঙ্ক করে।
সম্পাদনা: অ্যাডাপ্টার প্যাটার্নের জন্য একটি দ্রুত সাদৃশ্য (মন্তব্যের ভিত্তিতে) ডিভিআই-থেকে-ভিজিএ অ্যাডাপ্টারের মতো কিছু হতে পারে। আধুনিক ভিডিও কার্ডগুলি প্রায়শই ডিভিআই হয় তবে আপনি একটি পুরানো ভিজিএ মনিটর পেয়েছেন। এমন একটি অ্যাডাপ্টার যা আপনার ভিডিও কার্ডের প্রত্যাশিত ডিভিআই ইনপুটটিতে প্লাগ ইন করে এবং তার নিজস্ব ভিজিএ ইনপুট রয়েছে, আপনি আপনার নতুন ভিডিও কার্ডের সাথে আপনার পুরানো মনিটরকে কাজ করতে সক্ষম হবেন।
InputStreamReader
কোনটি অ্যাডাপ্ট InputStream
করে Reader
এবং OutputStreamWriter
কোনটি উভয়কেই অ্যাডাপ্ট OutputStream
করে Writer
যা বিভিন্ন বিমূর্ত প্রকারের।
অ্যাডাপ্টার == একটি বৃত্তাকার খোসা গোলাকার গর্তে ফিট করে।
সম্মুখস্থ == অভ্যন্তরীণ সমস্ত উপাদান চালানোর জন্য একটি একক নিয়ন্ত্রণ প্যানেল।
সত্যিই, অনেক নিদর্শন একইভাবে প্রোগ্রামে প্রয়োগ করা যেতে পারে - পার্থক্য উদ্দেশ্য মধ্যে।
অ্যাডাপ্টার ডিজাইন প্যাটার্নটি বোঝায় ক্লায়েন্টটি ব্যবহারের প্রত্যাশা এক বা একাধিক ক্লাসের ইন্টারফেসটিকে 'অনুবাদ' করে - অ্যাডাপ্টারের কলগুলি প্রত্যাশিত ইন্টারফেসে আসল ইন্টারফেসে আবৃত ক্লাসগুলি ব্যবহার করে transla
যখন একটি সহজ ইন্টারফেস চাওয়া হয় তখন ফেকাড প্যাটার্নটি ব্যবহৃত হয় (এবং আবারও আপত্তিকর ক্লাসগুলি মোড়ানো দ্বারা একইভাবে প্রয়োগ করা যেতে পারে)) আপনি যখন বলবেন না যে আপনি যখন প্রয়োজন তখন কেবল ইন্টারফেসটি বেমানান নয় যখন আপনি প্রয়োজন হবে এটিকে আরও পঠনযোগ্য, কম খারাপ নকশাকৃত ইত্যাদি তৈরি করা
ছদ্মরূপ:
মূল গ্রহণযোগ্যতা: ( পঙ্কজ কুমারের জার্নালদেব নিবন্ধ থেকে )
মুখোমুখি শ্রেণীর চিত্র:
নাটক:
অ্যাডাপ্টারের শ্রেণি চিত্র:
আপনি এই এসই পোস্টে অ্যাডাপ্টার সম্পর্কে আরও বিশদ জানতে পারেন:
ব্রিজ প্যাটার্ন এবং অ্যাডাপ্টার প্যাটার্নের মধ্যে পার্থক্য
মূল পার্থক্য:
আরও ভাল বোঝার জন্য উত্স তৈরির নিবন্ধটি একবার দেখুন ।
someMethod(int year, int month)
অর্পণ করা হয়েছিল someMethod(DateTime start, DateTime end)
বা দেয় বলে someMethod()
অর্পণsomeMethod(T param)
একটি মুখোমুখি একক পরিষেবা গেটওয়ের পিছনে একাধিক পরিষেবা সংগঠিত করার জন্য ডিজাইন করা হয়েছে। একটি অ্যাডাপ্টার একটি অজানা অ্যাক্সেস জন্য পরিচিত ইন্টারফেস ব্যবহার করার একটি উপায় প্রদান করার জন্য ডিজাইন করা হয়েছে।
উদ্দেশ্য a
ছদ্মরূপ হল সরলতা
অ্যাডাপ্টার হ'ল আন্তঃক্রিয়াশীলতা ।
মুখোমুখি সাধারণত অ্যাডাপ্টারের সাথে বিপরীতে থাকে।
+--------------------------------------------------------------+-----------------------------------------------+
| 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 |
+--------------------------------------------------------------+-----------------------------------------------+
যথারীতি, বেশ কয়েকটি নিদর্শনগুলির মধ্যে মিল রয়েছে। তবে আমি এটি দেখতে চাই:
আমি খুব আনুষ্ঠানিকতা ছাড়াই, সরল কথায় এটি ব্যাখ্যা করার চেষ্টা করব।
কল্পনা করুন যে আপনি কিছু ডোমেন ক্লাস পেয়েছেন এবং ইউআই থেকে আপনি তাদের সাথে ইন্টারঅ্যাক্ট করতে চান। UI স্তর থেকে ডাকা যেতে পারে এমন ফাংশন সরবরাহ করতে একটি ফ্যাসাদ ব্যবহার করা যেতে পারে যাতে ইউআই স্তরটি ফ্যাসাদ ছাড়া অন্য কোনও ডোমেন ক্লাস সম্পর্কে জানতে না পারে। এর অর্থ ডোমেন ক্লাসে ফাংশনগুলি কল করার পরিবর্তে আপনি মুখোমুখি থেকে একটি একক ফাংশন কল করেন যা অন্যান্য শ্রেণি থেকে প্রয়োজনীয় ফাংশনগুলি কল করার জন্য দায়বদ্ধ হবে।
অন্যদিকে, একটি অ্যাডাপ্টার অন্য বাহ্যিক উপাদানগুলিকে সংহত করতে ব্যবহার করা যেতে পারে যা আপনার প্রয়োজন একই কার্যকারিতা থাকতে পারে তবে তাদের ফাংশনগুলিকে একেবারে একইভাবে বলা হয় না। বলুন যে আপনি Car
আপনার ডোমেনে একটি ক্লাস পেয়েছেন এবং আপনি একটি বাহ্যিক গাড়ি সরবরাহকারীর সাথে কাজ করেন যার একটি গাড়ী শ্রেণীর সংজ্ঞাও রয়েছে। এই শ্রেণিতে, আপনি ফাংশনটি পেয়েছেন car.getDoors()
তবে বহিরাগত সরবরাহকারীর সমতুল্য রয়েছে car.getNumDoors()
। আপনি এই ফাংশনটি কল করার উপায়টি পরিবর্তন করতে চান না, সুতরাং আপনি বাহ্যিক গাড়ী শ্রেণিটি মোড়ানোর জন্য একটি অ্যাডাপ্টারের ক্লাস ব্যবহার করতে পারেন যাতে অ্যাডাপ্টারের কলটি বাহ্যিক শ্রেণীর getDoors()
কাছে অর্পিত হয় getNumDoors()
।
অ্যাডাপ্টার প্যাটার্ন দুটি, পূর্বে বেমানান ইন্টারফেস একে অপরের সাথে কাজ করার অনুমতি দেয়। খেলতে 2 পৃথক ইন্টারফেস রয়েছে।
মুখের প্যাটার্নটি একটি পরিচিত ইন্টারফেস নেয় যা নিম্ন স্তরের / সূক্ষ্ম দানযুক্ত এবং এটি একটি উচ্চ স্তরের / কোর্স গ্রেড ইন্টারফেসের সাথে আবৃত করে। একটি একক ইন্টারফেস রয়েছে, যা অন্যের সাথে মোড়ানো দ্বারা সরল করা হয়েছে।
অ্যাডাপ্টার দুটি ইন্টারফেস একসাথে কাজ করে তোলে।
ফেকাড একক শ্রেণিকে উচ্চতর এবং আরও সীমিত স্তরে প্রকাশিত করে। উদাহরণস্বরূপ, একটি ভিউ মডেল ফেইস কেবল নিম্ন স্তরের শ্রেণীর নির্দিষ্ট পঠনযোগ্য বৈশিষ্ট্যগুলি কেবল প্রকাশ করতে পারে।
অট্টালিকার সদরের বহির্ভাগ
একটি সহজ ইন্টারফেস সরবরাহ করতে জটিলতার বিমূর্ততা। উদাহরণস্বরূপ বলুন, একটি কম্পিউটার ওএস অন্তর্নিহিত হার্ডওয়্যারের জটিলতা বিমূর্ত করে। বা একটি উচ্চ-স্তরের প্রোগ্রামিং ভাষা (পাইথন / জাভাস্ক্রিপ্ট) যখন নিম্ন-স্তরের ভাষা (সি) এর সাথে তুলনা করা হয় তখন জটিলতা বিমূর্ত করে তোলে।
এডাপটার
এটি একটি হার্ডওয়্যার অ্যাডাপ্টারগুলির অ্যানালগগুলি। আপনি যদি একটি সংযুক্ত করতে চান বলুন USB device
একটি থেকে serial port
, আপনি একটি প্রয়োজন হবে USB-serial port adapter
।
অ্যাডাপ্টার প্যাটার্ন একটি নতুন ইন্টারফেস সরবরাহ করে দুটি বেমানান ইন্টারফেস লিঙ্ক।
মুখোমুখি প্যাটার্ন একটি একক ইন্টারফেসের মাধ্যমে একটি জটিল সাবসিস্টেমকে (একাধিক উপাদানযুক্ত) সহজ করে।
এই দুটি নিদর্শনগুলির মধ্যে পার্থক্য স্পষ্ট, তবে ডিজাইন প্যাটার্নগুলির ক্ষেত্রে নয়, তবে ডোমেন মডেলিং। নীচে, আমি কেন তা ব্যাখ্যা করব।
প্রথমে, আমি অন্যদের এখানে পুনর্বিবেচনা করতে চাই এবং তারপরে আমি নোটটি যুক্ত করব:
একটি মুখোমুখি একটি সাবসিস্টেমের একটি ইন্টারফেস (একটি বাহ্যিক বা একটি উত্তরাধিকার ব্যবস্থা) যা ক্লায়েন্টের (আমাদের) অ্যাক্সেসকে সহজতর করে। ফেকাড অন্য সাবসিস্টেমের ইন্টারফেসটি গোপন করে (কিছু কলগুলি সংযুক্ত করে, বা আমাদের প্রয়োজন হয় না এমন কয়েকটি API লুকিয়ে রাখে), এইভাবে আপনার ক্লায়েন্ট কেবল এই ফ্যাসাদের মাধ্যমে সাবসিস্টেমটিতে অ্যাক্সেস করে।
অন্যদিকে, অ্যাডাপ্টার হ'ল অন্য পরিষেবা বা বস্তুর চারপাশে একটি মোড়ক। এটি মোড়ানো বস্তুকে একটি স্ট্যান্ডার্ড ইন্টারফেসের সাথে মানিয়ে তোলে যা ক্লায়েন্টের প্রত্যাশা। আসুন ধরে নেওয়া যাক "লেজার" অবজেক্টে একটি পদ্ধতি রয়েছে, যা আপনাকে একটি টুইট করতে হবে (এর পরামিতিগুলি পরিবর্তন করুন, এর নাম পরিবর্তন করুন ইত্যাদি)। আপনি এটি একটি অ্যাডাপ্টার দিয়ে মোড়ানো করতে পারেন।
এখন, তফাতটি এখনও পরিষ্কার হতে পারে না। এখানেই আমি এই দুটি প্যাটার্নের মধ্যে মূল পার্থক্যটি সামনে আনতে চাই যেখানে আরও বিভ্রান্তির কোন জায়গা নেই :
ফেসিড অন্য সাবসিস্টেমের ডোমেন মডেলটি পরিবর্তন করে না, যখন অ্যাডাপ্টারটি করে। এটিই মূল পার্থক্য। সময়কাল।
এজন্যই যখন আপনি একটি অ্যান্টিকার্পশন লেয়ার তৈরি করেন তখন আপনি এই দুটি সংযুক্ত করে । ধরা যাক যে আপনি ব্যবহার করতে চান এমন সাবসিস্টেম রয়েছে তবে আপনি এটির ডোমেন মডেলটি আপনার ডোমেন মডেলকে গোলমাল করতে চান না। আপনি কি করতে চান? আপনি একটি দুর্নীতি স্তর তৈরি করতে চাই। কিভাবে? আপনি প্রথমে একটি ফ্যাসাদ তৈরি করেন, যা সাবসিস্টেমের জন্য ইন্টারফেস অ্যাক্সেসকে সহজতর করে এবং তারপরে সেই ইন্টারফেসে ব্যবহৃত ডোমেন অবজেক্টের জন্য অ্যাডাপ্টারগুলি (মনে রাখবেন যে মুখোশটি এখনও অন্য সাবসিস্টেমের জন্য ডোমেন মডেল ধারণ করে) তাই এটি আপনার মডেলের সাথে খাপ খায়।
ডোমেন মডেলিংয়ে অনেকগুলি নকশার নিদর্শন ব্যবহার করা যেতে পারে। এটি মুখোমুখি এবং অ্যাডাপ্টারের নকশার ধরণগুলির জন্যও সত্য। যদিও এই দুটি নিদর্শনগুলির মধ্যে পার্থক্য "ডিজাইনের ধরণ" রাজ্যে পরিষ্কার নাও হতে পারে, তবে এটি "ডোমেন মডেলিং" রাজ্যে আরও স্পষ্ট।
আমি উভয় সংজ্ঞা পড়ছি এবং সেগুলি বেশ একরকম বলে মনে হচ্ছে।
সত্যি?
আমি লক্ষ্য করেছি যে অ্যাডাপ্টার শব্দটি মাঝে মাঝে বাস্তবে একটি স্ট্যাটগি কী তা বর্ণনা করতে ব্যবহৃত হয় , কারণ শব্দটি আরও স্পষ্টবাদী is
উদাহরণস্বরূপ, জেন্ডার ফ্রেমওয়ার্কে সমস্ত অ্যাডাপ্টারের ক্লাসগুলি আসলে স্ট্র্যাটেজি প্যাটার্নের বাস্তবায়ন , কারণ তারা বেশ কয়েকটি আচরণের জন্য কেবল শ্রেণির পিছনে নেটিভ কোডটি আবদ্ধ করে।
অ্যাডাপ্টারগুলি প্রায়শই উত্তরাধিকার বা "পুরানো-শৈলী" কোড মোড়ানোর জন্য ব্যবহৃত হয়।
ফ্যাসাড প্যাটার্নের প্রধান লক্ষ্যটি ক্লাস বা সাবসিস্টেমটি ব্যবহার করা সহজতর করা, যখন অ্যাডাপ্টার প্যাটার্নের প্রধান লক্ষ্য ক্লায়েন্টের প্রত্যাশা অনুযায়ী ইন্টারফেসটি সামঞ্জস্য করা।