আমার একটি ইন্টারফেস রয়েছে যা নির্দিষ্ট পরিমাণে সংজ্ঞায়িত কার্যকারিতা রয়েছে। চল বলি:
interface BakeryInterface {
public function createCookies();
public function createIceCream();
}
এটি ইন্টারফেসের বেশিরভাগ বাস্তবায়নের জন্য ভাল কাজ করে তবে কয়েকটি ক্ষেত্রে আমাকে কিছু নতুন কার্যকারিতা যুক্ত করতে হবে (যেমন সম্ভবত কোনও নতুন পদ্ধতিতে রোলড করা createBrownies()
)। এটি করার স্পষ্ট / নিষ্পাপ পদ্ধতির ইন্টারফেসটি প্রসারিত করা হবে:
interface BrownieBakeryInterface extends BakeryInterface {
public function createBrownies();
}
তবে এর বেশ বড় খারাপ দিক রয়েছে যে আমি বিদ্যমান এপিআই পরিবর্তন না করে নতুন কার্যকারিতা যুক্ত করতে পারছি না (নতুন ইন্টারফেসটি ব্যবহারের জন্য শ্রেণি পরিবর্তন করার মতো)।
আমি তাত্ক্ষণিকতার পরে কার্যকারিতা যুক্ত করতে একটি অ্যাডাপ্টার ব্যবহার করার কথা ভাবছিলাম :
class BrownieAdapter {
private brownieBakery;
public function construct(BakeryInterface bakery) {
this->brownieBakery = bakery;
}
public function createBrownies() {
/* ... */
}
}
যা আমাকে এমন কিছু জাল করবে:
bakery = new Bakery();
bakery = new BrownieBakery(bakery);
bakery->createBrownies();
এটি সমস্যার উত্তম সমাধানের মতো বলে মনে হচ্ছে তবে আমি ভাবছি আমি যদি এটি করে পুরানো দেবতাদের জাগ্রত করছি। অ্যাডাপ্টারটি কি যাওয়ার উপায়? অনুসরণ করার জন্য আরও ভাল প্যাটার্ন আছে কি? বা আমার কি সত্যিই বুলেট কামড়ানো এবং কেবলমাত্র মূল ইন্টারফেসটি প্রসারিত করা উচিত?