আমি সিঙ্গলটন প্যাটার্ন সম্পর্কে বিভিন্ন মতামত পড়েছি। কেউ কেউ মনে করেন যে এটি কোনও মূল্যে এড়ানো উচিত এবং অন্যরা এটি নির্দিষ্ট পরিস্থিতিতে কার্যকর হতে পারে।
আমি সিলেটলেটগুলি ব্যবহার করি এমন একটি পরিস্থিতিটি যখন আমার নির্দিষ্ট শ্রেণির এ তৈরির জন্য কারখানার প্রয়োজন হয় (আসুন এফের ধরণের একটি অবজেক্ট বলা যাক) A. কিছু কনফিগারেশন প্যারামিটার ব্যবহার করে কারখানাটি একবার তৈরি করা হয় এবং তারপরে প্রতিটি বারের কোনও বস্তু ব্যবহার করা হয় টাইপ এ তাত্ক্ষণিক হয়। সুতরাং কোডের প্রতিটি অংশ যা এটিকে ইনস্ট্যান্ট করতে চায় সিঙ্গলটন এফ এনেছে এবং নতুন উদাহরণ তৈরি করে, যেমন
F& f = F::instance();
boost::shared_ptr<A> a = f.createA();
আমার সাধারণ অবস্থা তাই
- আমার কাছে ক্লাসের কেবলমাত্র একটি উদাহরণ প্রয়োজন হয় অপ্টিমাইজেশনের কারণে (আমার একাধিক কারখানার জিনিস প্রয়োজন নেই) বা সাধারণ রাষ্ট্র ভাগ করে নেওয়ার জন্য (যেমন কারখানাটি জানে এটি এখনও কতগুলি উদাহরণ তৈরি করতে পারে)
- কোডের বিভিন্ন জায়গায় আমার এই দৃষ্টান্তের F এর অ্যাক্সেস পাওয়ার একটি উপায় দরকার।
এই প্যাটার্নটি ভাল বা খারাপ কিনা তা নিয়ে আমি আলোচনায় আগ্রহী নই তবে আমি ধরে নিচ্ছি যে আমি একটি সিঙ্গলটন ব্যবহার এড়াতে চাই, আমি আর কোন প্যাটার্ন ব্যবহার করতে পারি?
আমার ধারণাগুলি ছিল (1) একটি রেজিস্ট্রি থেকে কারখানার অবজেক্ট পেতে বা (2) প্রোগ্রাম শুরু করার সময় কারখানাটি তৈরি করতে এবং তারপরে কারখানাকে প্যারামিটার হিসাবে পাস করার জন্য।
সমাধান (1) এ, রেজিস্ট্রি নিজেই একটি সিঙ্গলটন, তাই আমি কারখানা থেকে একটি সিঙ্গলটন ব্যবহার না করে সমস্যাটিকে রেজিস্ট্রিতে সরিয়ে নিয়েছি।
ক্ষেত্রে (২) আমার কিছু প্রাথমিক উত্স (অবজেক্ট) প্রয়োজন যা থেকে কারখানার অবজেক্টটি আসে তাই আমি আশঙ্কা করি যে আমি আবার কোনও সিঙ্গলটনে ফিরে যেতে পারি (যে জিনিসটি আমার ফ্যাক্টরির উদাহরণ দেয়)। সিলেটনের এই চেইনটিকে অনুসরণ করে আমি সম্ভবত একক সিঙ্গলটনে (পুরো অ্যাপ্লিকেশনটি) সমস্যা কমাতে পারি যার দ্বারা অন্যান্য সমস্ত সিলেটলেট প্রত্যক্ষ বা পরোক্ষভাবে পরিচালিত হয়।
এই শেষ বিকল্পটি (একটি প্রাথমিক একক সিঙ্গলটন ব্যবহার করে যা অন্যান্য সমস্ত অনন্য অবজেক্ট তৈরি করে এবং সঠিক জায়গায় অন্য সমস্ত সিঙ্গেলনকে সংক্রামিত করে) এটি গ্রহণযোগ্য সমাধান হতে পারে? কেউ যদি সিলেটলেট ব্যবহার না করার পরামর্শ দেয় বা অন্য সমাধানগুলি কী, যেমন উপরে বর্ণিত উদাহরণে উদাহরণস্বরূপ, তখন কি এই সমাধানটিই সুস্পষ্টভাবে প্রস্তাব দেওয়া হয়?
সম্পাদনা
যেহেতু আমি মনে করি আমার প্রশ্নের বিন্দুটি কেউ কেউ ভুল বুঝে গেছে তাই এখানে আরও কিছু তথ্য দেওয়া হল। যেমন যেমন এখানে ব্যাখ্যা করা হয়েছে , সিঙ্গেলটন শব্দটি (ক) একটি একক উদাহরণ বস্তু সহ একটি শ্রেণি এবং (খ) এই জাতীয় অবজেক্ট তৈরি এবং অ্যাক্সেস করতে ব্যবহৃত একটি নকশার প্যাটার্নকে নির্দেশ করতে পারে।
জিনিসগুলিকে আরও পরিষ্কার করে তুলতে আসুন (ক) এর জন্য অনন্য অবজেক্ট এবং (খ) এর জন্য সিঙ্গলটন প্যাটার্নটি ব্যবহার করুন। সুতরাং, আমি জানি যে সিঙ্গেলটন প্যাটার্ন এবং নির্ভরতা ইনজেকশনটি কী (বিটিডাব্লু, ইদানীং আমি ডিআই-র ভারী ব্যবহার করছি যে কোডটি আমি কাজ করছি সেখান থেকে সিঙ্গলটন প্যাটার্নের উদাহরণগুলি সরাতে)।
আমার বক্তব্যটি হ'ল মূল পদ্ধতির স্ট্যাকের উপরে থাকা কোনও একক বস্তু থেকে পুরো অবজেক্ট গ্রাফটি ইনস্ট্যান্ট না করা না হলে সর্বদা সিঙ্গলটন প্যাটার্নের মাধ্যমে কিছু অনন্য বস্তু অ্যাক্সেস করার প্রয়োজন থাকবে।
আমার প্রশ্নটি হ'ল সম্পূর্ণ অবজেক্ট গ্রাফ তৈরি এবং ওয়্যারিংগুলি মূল পদ্ধতির উপর নির্ভর করে (যেমন কিছু শক্তিশালী ডিআই ফ্রেমওয়ার্কের মাধ্যমে যা প্যাটার্নটি নিজেই ব্যবহার করে না) একমাত্র সিঙ্গলটন-প্যাটার্ন মুক্ত সমাধান।