সহায়ক / ইউটিলিটি ক্লাস সম্পর্কে এই সাধারণ প্রশ্নের ভাল উত্তর আমি কখনই পাইনি:
আমি স্থির পদ্ধতি ব্যবহারের পরিবর্তে কেন একটি সিঙ্গলটন (রাষ্ট্রবিহীন) তৈরি করব?
কোনও বস্তুর কোনও রাজ্য না থাকলে কেন কোনও বস্তুর উদাহরণের প্রয়োজন হবে?
সহায়ক / ইউটিলিটি ক্লাস সম্পর্কে এই সাধারণ প্রশ্নের ভাল উত্তর আমি কখনই পাইনি:
আমি স্থির পদ্ধতি ব্যবহারের পরিবর্তে কেন একটি সিঙ্গলটন (রাষ্ট্রবিহীন) তৈরি করব?
কোনও বস্তুর কোনও রাজ্য না থাকলে কেন কোনও বস্তুর উদাহরণের প্রয়োজন হবে?
উত্তর:
প্রায়শই, একক অ্যাপ্লিকেশনটির জন্য একরকম বিশ্বব্যাপী অবস্থা প্রবর্তনের জন্য সিলেটলেটন ব্যবহার করা হয় । (সত্যিকারের প্রয়োজনের চেয়ে প্রায়শই বেশি প্রয়োজন, তবে এটি অন্য সময়ের জন্য একটি বিষয়))
তবে কয়েকটি কর্নার কেস রয়েছে যেখানে স্টেটহীন সিঙ্গলটনও কার্যকর হতে পারে:
lock
synchronized
Toolkit.getDefaultToolkit()
জাভার পদ্ধতিটি এমন একক সিঙ্গলকে ফিরিয়ে দেবে যার সঠিক ধরণটি সিস্টেম নির্ভর।DBNull.Value
আমি স্ট্যাটিক পদ্ধতিগুলির ক্লাসের পরিবর্তে স্টেটলেস সিঙ্গলটন ব্যবহারের ক্ষেত্রে কেস দেখতে পেতাম, যথা নির্ভরতা ইনজেকশন এর জন্য ।
আপনি যদি সরাসরি ব্যবহার করছেন এমন ইউটিলিটি ফাংশনের কোনও সহায়ক শ্রেণি থাকে তবে এটি একটি গোপন নির্ভরতা তৈরি করে; কে এটি ব্যবহার করতে পারে বা কোথায় তা নিয়ন্ত্রণ করতে পারে না। স্টেটলেস সিঙ্গলটন দৃষ্টান্তের মাধ্যমে সেই একই সহায়ক শ্রেণীর ইনজেকশন আপনাকে এটি কোথায় এবং কীভাবে ব্যবহার করা হচ্ছে তা নিয়ন্ত্রণ করতে দেয় এবং আপনার যখন প্রয়োজন হয় তখন এটিকে / উপহাস করে / ইত্যাদি প্রতিস্থাপন করে।
এটি একটি সিঙ্গলটন উদাহরণ তৈরি করা সহজভাবে নিশ্চিত করে যে আপনি প্রয়োজনের চেয়ে ধরণের আর কোনও অবজেক্ট বরাদ্দ করছেন না (যেহেতু আপনার কেবল কখনও প্রয়োজন)।
প্রকৃতপক্ষে আমি এখানে অন্য উত্তরটির উল্লেখ না করে খুঁজে পেয়েছি: স্থির পদ্ধতিগুলি পরীক্ষা করা আরও কঠিন।
দেখে মনে হচ্ছে বেশিরভাগ পরীক্ষার ফ্রেমওয়ার্কগুলি মশকরা উদাহরণ পদ্ধতিগুলির জন্য দুর্দান্ত কাজ করে তবে তাদের অনেকগুলি স্থির পদ্ধতিগুলির উপহাসকে শালীন উপায়ে পরিচালনা করে না।
বেশিরভাগ প্রোগ্রামিং ভাষার ক্লাসে প্রচুর টাইপ সিস্টেম থাকে system স্থিতিশীল পদ্ধতি এবং ভেরিয়েবলগুলি সহ একটি শ্রেণি যদিও একটি বস্তু হয় তবে এটি প্রায়শই কোনও ইন্টারফেস বাস্তবায়ন করতে পারে না বা অন্যান্য শ্রেণি প্রসারিত করতে পারে না। যে কারণে এটি বহুকর্মী পদ্ধতিতে ব্যবহার করা যায় না, কারণ এটি অন্য ধরণের সাব টাইপ হতে পারে না। উদাহরণস্বরূপ, আপনার যদি একটি ইন্টারফেস থাকে IFooable
, যা অন্যান্য শ্রেণীর একাধিক পদ্ধতি স্বাক্ষর দ্বারা প্রয়োজনীয়, বর্গ অবজেক্টের StaticFoo
জায়গায় ব্যবহার করা যাবে না IFooable
, যেখানে FooSingleton.getInstance()
(অনুমান, FooSingleton
প্রয়োগ IFooable
)।
দয়া করে নোট করুন, যেহেতু আমি হেইনজির উত্তরে মন্তব্য করেছি, তেমনি একটি সিঙ্গলটন তাত্পর্য নিয়ন্ত্রণের একটি নিদর্শন। এটি এর সাথে প্রতিস্থাপন new Class()
করে Class.getInstance()
, যা লেখককে Class
দৃষ্টান্তগুলির উপরে আরও নিয়ন্ত্রণের সুযোগ দেয় , যা তিনি অযৌক্তিক দৃষ্টান্তগুলির সৃষ্টি রোধ করতে ব্যবহার করতে পারেন। সিঙ্গেলটন কারখানার প্যাটার্নের খুব বিশেষ একটি ক্ষেত্র এবং এটির মতোই আচরণ করা উচিত। সাধারণ ব্যবহার এটিকে বৈশ্বিক রেজিস্ট্রিগুলির বিশেষ ক্ষেত্রে পরিণত করে, যা প্রায়শই খারাপ হয়ে যায়, কারণ বৈশ্বিক নিবন্ধগুলি কেবল উইলি-নিলি ব্যবহার করা উচিত নয়।
আপনি যদি গ্লোবাল সহায়ক ফাংশন সরবরাহ করার পরিকল্পনা করেন তবে স্থির পদ্ধতিগুলি ঠিক কাজ করবে। শ্রেণি শ্রেণী হিসাবে কাজ করবে না, বরং কেবল একটি নেমস্পেস হিসাবে। আমি আপনাকে পরামর্শ দিচ্ছি, আপনি উচ্চ সংহতি রক্ষা করুন, অথবা আপনি সবচেয়ে অদ্ভুত সংযোগের সমস্যাটি শেষ করতে পারেন।
greetz
back2dos
কোনটি ব্যবহারের মধ্যে একটি বাণিজ্য রয়েছে। সিলেটলেটগুলির স্টেট থাকতে পারে এবং নাও থাকতে পারে এবং তারা অবজেক্টগুলিকে উল্লেখ করে। যদি তারা রাষ্ট্র রাখে না এবং কেবল বিশ্বব্যাপী অ্যাক্সেসের জন্য ব্যবহার হয় তবে স্থিতিশীল আরও ভাল কারণ এই পদ্ধতিগুলি আরও তত দ্রুত হবে। তবে আপনি যদি অবজেক্টস এবং ওওপি ধারণাগুলি (উত্তরাধিকার পলিমারফিজম) ব্যবহার করতে চান তবে সিঙ্গলটন আরও ভাল।
একটি উদাহরণ বিবেচনা করুন: জাভা.লং.রুনটাইম জাভাতে একটি সিঙ্গলটন ক্লাস। এই শ্রেণিটি প্রতিটি জেভিএমের জন্য বিভিন্ন বাস্তবায়নের অনুমতি দেয়। JVM প্রতি বাস্তবায়ন একক। এই শ্রেণিটি যদি স্থির হত তবে আমরা জেভিএম এর ভিত্তিতে বিভিন্ন বাস্তবায়ন পাস করতে পারি না।
আমি এই লিঙ্কটি সত্যই সহায়ক বলে খুঁজে পেয়েছি: http://javarevisited.blogspot.com/2013/03/differences-between-singleton-pattern-vs-static-class-java.html ?
আশা করি এটা সাহায্য করবে!!
আমার জন্য "অবজেক্ট স্টেট সিঙ্গলটন ব্যবহার করতে চান, ফাংশনটি স্ট্যাটিক পদ্ধতি ব্যবহার করতে চান"
এটি নির্ভর করে তুমি কি চাও। যখনই আপনি অবজেক্টের রাজ্যটি চান (যেমন নল রাজ্যের পরিবর্তে নল রাজ্যের মতো পলিমারফিজম null
বা ডিফল্ট রাষ্ট্র), সিঙ্গেলটন আপনার পক্ষে উপযুক্ত পছন্দ যেখানে স্থির পদ্ধতি ব্যবহার করার দরকার হয় যখন আপনার ফাংশন প্রয়োজন হয় (ইনপুটগুলি গ্রহণ করুন তারপরে একটি আউটপুট ফেরত দিন)।
আমি সিঙ্গলটন কেসের জন্য প্রস্তাব দিচ্ছি, এটি ইনস্ট্যান্ট হওয়ার পরে সর্বদা একই অবস্থা হওয়া উচিত। এটি ক্লোনযোগ্য না হওয়া উচিত এবং সেট করতে কোনও মানই পাওয়া উচিত নয় ( জাভাতে থাকা বৈশিষ্ট্য ফাইল যেমন ফাইল থেকে স্ট্যাটিক কনফিগারেশন ব্যতীত )।
পিএস এই 2 এর মধ্যে পারফরম্যান্স মিলিসেকেন্ডে আলাদা, তাই প্রথমে আর্কিটেকচারে ফোকাস করুন ।
সিঙ্গলটন রাষ্ট্রহীন নয়, এটি বিশ্বব্যাপী রাষ্ট্র ধারণ করে।
আমি সিঙ্গলটন ব্যবহারের কথা ভাবতে পারি এমন কয়েকটি কারণ হ'ল: