स्थैतिक वर्गों के साथ कुछ भी गलत नहीं है जो वास्तव में स्थिर हैं । कहने का तात्पर्य यह है कि बोलने की कोई आंतरिक स्थिति नहीं है, जिससे तरीकों का उत्पादन बदल सके।
यदि Dice.roll()
बस 1 से 6 तक एक नया रैंडम नंबर लौटा रहा है, तो यह राज्य नहीं बदल रहा है। दी, आप एक Random
उदाहरण साझा कर रहे हैं , लेकिन मैं यह नहीं समझूंगा कि परिभाषा के अनुसार राज्य का एक बदलाव, आउटपुट हमेशा अच्छा, यादृच्छिक होने वाला है। यह थ्रेड-सेफ भी है, इसलिए यहां कोई समस्या नहीं है।
आप अक्सर अंतिम "हेल्पर" या अन्य उपयोगिता कक्षाएं देखेंगे जिनमें एक निजी निर्माता और स्थिर सदस्य हैं। निजी कंस्ट्रक्टर में कोई तर्क नहीं होता है और केवल किसी को क्लास को तत्काल करने से रोकने के लिए कार्य करता है। अंतिम संशोधन केवल इस विचार को घर लाता है कि यह एक ऐसा वर्ग नहीं है जिसे आप कभी प्राप्त करना चाहते हैं। यह केवल एक उपयोगिता वर्ग है। यदि ठीक से किया जाता है, तो कोई एकल या अन्य वर्ग के सदस्य नहीं होने चाहिए जो स्वयं स्थिर और अंतिम न हों।
जब तक आप इन दिशानिर्देशों का पालन करते हैं और आप एकल नहीं कर रहे हैं, तब तक इसमें कुछ भी गलत नहीं है। आप एक नियंत्रक वर्ग का उल्लेख करते हैं, और इसके लिए निश्चित रूप से राज्य परिवर्तनों की आवश्यकता होगी, इसलिए मैं केवल स्थैतिक तरीकों का उपयोग करने के खिलाफ सलाह दूंगा । आप स्थैतिक उपयोगिता वर्ग पर बहुत अधिक भरोसा कर सकते हैं, लेकिन आप इसे स्थैतिक उपयोगिता वर्ग नहीं बना सकते ।
एक वर्ग के लिए राज्य में बदलाव को क्या माना जाता है ? ठीक है, एक दूसरे के लिए यादृच्छिक संख्या को बाहर करने की अनुमति देता है, क्योंकि वे परिभाषा द्वारा nondeterministic हैं और इसलिए वापसी मूल्य अक्सर बदलता रहता है।
एक शुद्ध कार्य वह है जो नियतात्मक है, जो कहना है, दिए गए इनपुट के लिए, आपको एक और बिल्कुल एक आउटपुट मिलेगा। आप चाहते हैं कि स्थिर विधियाँ शुद्ध कार्य हों। जावा में स्टेट को होल्ड करने के लिए स्टैटिक मेथड्स के व्यवहार के तरीके हैं, लेकिन वे लगभग कभी अच्छे विचार नहीं रखते हैं। जब आप किसी विधि को स्थिर के रूप में घोषित करते हैं , तो विशिष्ट प्रोग्रामर सही बल्ले से मान लेगा कि यह एक शुद्ध कार्य है। अपेक्षित व्यवहार से विचलित करना यह है कि आप अपने कार्यक्रम में बग कैसे बनाते हैं, आम तौर पर बोलना और बचना चाहिए।
एक सिंगलटन एक वर्ग है जिसमें "शुद्ध कार्य" के विपरीत स्थिर तरीके हैं, जैसा कि आप हो सकते हैं। एक एकल स्थिर निजी सदस्य को आंतरिक रूप से उस वर्ग के लिए रखा जाता है जिसका उपयोग यह सुनिश्चित करने के लिए किया जाता है कि वास्तव में एक ही उदाहरण है। यह सबसे अच्छा अभ्यास नहीं है और कई कारणों से बाद में आपको परेशानी में डाल सकता है। यह जानने के लिए कि हम किस बारे में बात कर रहे हैं, यहाँ एक सिंगलटन का एक सरल उदाहरण है:
// DON'T DO THIS!
class Singleton {
private String name;
private static Singleton instance = null;
private Singleton(String name) {
this.name = name;
}
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton("George");
}
return instance;
}
public getName() {
return name;
}
}
assert Singleton.getInstance().getName() == "George"