জেনেরিক ধরণের এবং ডুপ্লিকেট ইন্টারফেস ঘোষণার কারণে নীচের শ্রেণীর সংজ্ঞাটি সংকলন করা যায় না আপনি এটি সরাসরি এক শ্রেণিতে করতে পারবেন না।
class TwoTypesConsumer implements Consumer<Apple>, Consumer<Tomato> {
// cannot compile
...
}
এক শ্রেণিতে একই গ্রাহক ক্রিয়াকলাপ প্যাকিংয়ের জন্য অন্য কোনও সমাধানের জন্য আপনার শ্রেণিটি নির্ধারণ করতে হবে:
class TwoTypesConsumer { ... }
উভয় ক্রিয়াকলাপের সংজ্ঞাটি পুনরায় / ডুপ্লিকেট করার জন্য এটি অর্থহীন এবং এগুলি ইন্টারফেস থেকে রেফারেন্স করা হবে না। আইএমএইচও এটি করা একটি খারাপ ছোট এবং কোডের নকল যা আমি এড়াতে চাইছি।
এটি একটি সূচকও হতে পারে যে একটি শ্রেণিতে 2 টি পৃথক বস্তু (যদি তারা সংযুক্ত না হয়) গ্রাস করার জন্য খুব বেশি দায়বদ্ধতা রয়েছে।
তবে আমি যা করছি এবং আপনি যা করতে পারেন তা হল নিম্নলিখিত উপায়ে সংযুক্ত গ্রাহকদের তৈরি করতে সুস্পষ্ট কারখানার অবজেক্ট যুক্ত করা:
interface ConsumerFactory {
Consumer<Apple> createAppleConsumer();
Consumer<Tomato> createTomatoConsumer();
}
বাস্তবে যদি এই ধরণেরগুলি সত্যই সংযুক্ত হয় (সম্পর্কিত) তবে আমি এইভাবে একটি বাস্তবায়ন তৈরি করার পরামর্শ দেব:
class TwoTypesConsumerFactory {
// shared objects goes here
private class TomatoConsumer implements Consumer<Tomato> {
public void consume(Tomato tomato) {
// you can access shared objects here
}
}
private class AppleConsumer implements Consumer<Apple> {
public void consume(Apple apple) {
// you can access shared objects here
}
}
// It is really important to return generic Consumer<Apple> here
// instead of AppleConsumer. The classes should be rather private.
public Consumer<Apple> createAppleConsumer() {
return new AppleConsumer();
}
// ...and the same here
public Consumer<Tomato> createTomatoConsumer() {
return new TomatoConsumer();
}
}
সুবিধাটি হ'ল কারখানার শ্রেণি উভয় বাস্তবায়ন জানে, একটি অংশীদারি রাষ্ট্র রয়েছে (প্রয়োজনে) এবং প্রয়োজনে আপনি আরও সংযুক্ত গ্রাহককে ফিরিয়ে দিতে পারেন। ইন্টারফেস থেকে প্রাপ্ত নয় এমন পুনরাবৃত্তি গ্রহণের পদ্ধতি ঘোষণা নেই।
দয়া করে মনে রাখবেন যে প্রতিটি গ্রাহক সম্পূর্ণরূপে সম্পর্কিত না হলে স্বতন্ত্র (এখনও ব্যক্তিগত) শ্রেণি হতে পারে।
এই সমাধানটির খারাপ দিকটি হ'ল একটি উচ্চ শ্রেণীর জটিলতা (যদিও এটি একটি জাভা ফাইল হতে পারে) এবং গ্রাহক পদ্ধতিতে অ্যাক্সেস পেতে আপনার পরিবর্তে আরও একটি কল প্রয়োজন:
twoTypesConsumer.consume(apple)
twoTypesConsumer.consume(tomato)
তোমার আছে:
twoTypesConsumerFactory.createAppleConsumer().consume(apple);
twoTypesConsumerFactory.createTomatoConsumer().consume(tomato);
সংক্ষিপ্তসার হিসাবে আপনি 2 টি অভ্যন্তরীণ ক্লাস ব্যবহার করে একটি উচ্চ-স্তরের শ্রেণিতে 2 জেনেরিক গ্রাহককে সংজ্ঞায়িত করতে পারেন তবে কল করার ক্ষেত্রে আপনাকে প্রথমে যথাযথ প্রয়োগকারী ভোক্তার একটি রেফারেন্স পাওয়া দরকার কারণ এটি কেবল একটি ভোক্তা অবজেক্ট হতে পারে না।