পটভূমি
এখানে আমি প্রকৃত সমস্যাটি নিয়ে কাজ করছি: আমি কার্ড গেমের যাদুতে: জড়ো হওয়াতে কার্ড উপস্থাপনের একটি উপায় চাই । গেমের বেশিরভাগ কার্ডগুলি দেখতে সাধারণ দেখতে কার্ড, তবে তাদের কিছু অংশ দুটি অংশে বিভক্ত হয়, যার প্রত্যেকটির নিজস্ব নাম রয়েছে। এই দ্বি-অংশ কার্ডের প্রতিটি অর্ধেককেই কার্ড হিসাবে বিবেচনা করা হয়। সুতরাং স্পষ্টতার জন্য, আমি Card
কেবলমাত্র এমন কিছু যা কেবল নিয়মিত কার্ড, বা দ্বি-পার্ট কার্ডের অর্ধেক (অন্যথায়, কেবলমাত্র একটি নাম সহ কিছু) উল্লেখ করতে ব্যবহার করব।
সুতরাং আমরা একটি বেস টাইপ আছে, কার্ড। এই বিষয়গুলির উদ্দেশ্যটি কেবলমাত্র কার্ডের বৈশিষ্ট্য ধরে রাখা। তারা সত্যই নিজেরাই কিছু করে না।
interface Card {
String name();
String text();
// etc
}
এখানে দুটি সাবক্লাস রয়েছে Card
, যা আমি কল করছি PartialCard
(দুই অংশের কার্ডের অর্ধেক) এবং WholeCard
(একটি নিয়মিত কার্ড)। PartialCard
দুটি অতিরিক্ত পদ্ধতি রয়েছে: PartialCard otherPart()
এবং boolean isFirstPart()
।
প্রতিনিধিরা
যদি আমি একটি ডেক আছে, এটা গঠিত উচিত WholeCard
গুলি, না Card
, গুলি একটি Card
একটি হতে পারে PartialCard
, এবং যে অর্থে দেখা যায় না। সুতরাং আমি এমন একটি বস্তু চাই যা একটি "শারীরিক কার্ড" উপস্থাপন করে, এটি এমন একটি জিনিস যা একটি WholeCard
, বা দুটি PartialCard
গুলি প্রতিনিধিত্ব করতে পারে । আমি অস্থায়ীভাবে এই ধরণের কল করছি Representative
এবং Card
পদ্ধতিটি থাকবে getRepresentative()
। এ Representative
এটি প্রতিনিধিত্ব করে এমন কার্ড (গুলি) সম্পর্কে প্রায় কোনও সরাসরি তথ্য সরবরাহ করবে না, এটি কেবল এটি / তাদেরকে নির্দেশ করবে। এখন আমার উজ্জ্বল / পাগল / মূক ধারণা (আপনি সিদ্ধান্ত নিতে) থেকে যে WholeCard উত্তরাধিকারী হয় উভয় Card
এবং Representative
। সর্বোপরি, তারা কার্ড যা নিজের প্রতিনিধিত্ব করে! হোলকার্ডগুলি getRepresentative
হিসাবে বাস্তবায়ন করতে পারে return this;
।
হিসাবে PartialCards
, তারা নিজের প্রতিনিধিত্ব করে না, তবে তাদের একটি বাহ্যিক রয়েছে Representative
যা একটি নয় Card
, তবে দুটি এসকে অ্যাক্সেসের জন্য পদ্ধতি সরবরাহ করে PartialCard
।
আমি মনে করি এই ধরণের শ্রেণিবিন্যাসটি বোধগম্য হয় তবে এটি জটিল। আমরা যদি Card
"ধারণাগত কার্ড" এবং Representative
এসকে "শারীরিক কার্ড " হিসাবে ভাবি তবে বেশিরভাগ কার্ড উভয়ই! আমি মনে করি আপনি একটি যুক্তি দিতে পারেন যে শারীরিক কার্ডগুলিতে বাস্তবে ধারণাগত কার্ড থাকে এবং তারা একই জিনিস নয় তবে আমি যুক্তি দিয়ে বলব যে তারা they
টাইপ-ingালাইয়ের প্রয়োজনীয়তা
কারণ PartialCard
ও WholeCards
উভয়ই উভয় এবং এগুলি Card
আলাদা করার জন্য সাধারণত কোনও ভাল কারণ নেই, আমি সাধারণত কাজ করে যাচ্ছিলাম Collection<Card>
। তাই কখনও কখনও PartialCard
তাদের অতিরিক্ত পদ্ধতিগুলি অ্যাক্সেস করার জন্য আমার প্রয়োজন হয় cast এই মুহুর্তে, আমি এখানে বর্ণিত সিস্টেমটি ব্যবহার করছি কারণ আমি সত্যিই সুস্পষ্ট ক্যাসেট পছন্দ করি না। এবং এর মতো Card
, তারা যেগুলির প্রকৃত প্রতিনিধিত্ব করে সেটি অ্যাক্সেস করার জন্য Representative
একটি WholeCard
বা কাস্ট করা প্রয়োজন ।Composite
Card
সুতরাং কেবল সংক্ষিপ্তসার জন্য:
- বেস টাইপ
Representative
- বেস টাইপ
Card
- টাইপ করুন
WholeCard extends Card, Representative
(কোনও অ্যাক্সেসের প্রয়োজন নেই, এটি নিজের প্রতিনিধিত্ব করে) - প্রকার
PartialCard extends Card
(অন্যান্য অংশে অ্যাক্সেস দেয়) - প্রকার
Composite extends Representative
(উভয় অংশে অ্যাক্সেস দেয়)
এ কি পাগল? আমি মনে করি এটি আসলে অনেক অর্থবোধ করে, তবে আমি সত্যই নিশ্চিত নই।