हां, आप हाइबरनेट के साथ फ्लाईवेट पैटर्न को कार्यान्वित कर सकते हैं।
फ्लाईवेट पैटर्न स्मृति उपयोग प्रति उदाहरण को कम करने का तरीका है। रणनीति संभवतः फ्लाईवेट उदाहरणों के बीच जितना संभव हो उतना राज्य साझा करना है। आपके मामले में शेयर करने योग्य स्थिति हाइबरनेट ऑब्जेक्ट आइडेंटिफ़ायर को छोड़कर सबकुछ और वस्तु पहचान को बनाए रखने के लिए कुछ अतिरिक्त राज्य है।
प्रत्येक फ्लाईवेट इंस्टेंस को अपने object identity की आवश्यकता होती है। अतिरिक्त राज्य सामान्य स्थिति साझा करने वाली वस्तुओं के बीच अंतर करने के लिए पहचान को लागू करने का तरीका है।
public boolean equals(Object obj){
Fly other; [..]//check type
//null checks ommitted
return other.myState.equals(myState) && other.commonState.equals(commonState);
}
वस्तु पहचान उदाहरणों के बीच साझा किया जाता है हाइबरनेट एक ही उदाहरण के रूप में सभी भौतिक उदाहरणों (संदर्भ) की व्याख्या करेंगे। हाइबरनेट ऑब्जेक्ट पहचान की जांच करने के लिए बराबर विधि का उपयोग करता है और आपके बराबर कार्यान्वयन को (! a.equals(a) == true)
वापस करना होगा जो अवैध है। Equal को रिफ्लेक्सिव होना चाहिए। यदि आप इस अनुबंध को तोड़ देंगे तो अनुबंध पर निर्भर सभी पुस्तकालयों को तोड़ दिया जाएगा (संग्रह, हाइबरनेट, आदि)।
आप ऑब्जेक्ट्स के बीच अंतर करने के लिए हाइबरनेट ऑब्जेक्ट आइडेंटिफ़ायर का उपयोग करके बराबर विधि को लागू नहीं कर सकते हैं। यह ऑब्जेक्ट पहचान दृढ़ता स्थिति (निरंतर या क्षणिक) पर निर्भर करेगा।
हाइबरनेट में सामान्य स्थिति को मॉडल करने का एक तरीका साझा राज्य वस्तुओं और फ्लाईवेट ऑब्जेक्ट्स के बीच एक-से-कई संबंध है। (शायद किसी को पता है कि दो टेबल में शामिल किए बिना डेटा को कैसे मैप करना है?)
स्ट्रिंग: केवल internalized strings साझा किया जाएगा। यह ज्यादातर समय का सबसे अच्छा समाधान नहीं है। यह प्रतीकों के लिए उपयुक्त है (कक्षा का नाम, विधि का नाम, आदि)। आंतरिक तारों को कचरा इकट्ठा नहीं किया जाएगा और आपको एक स्ट्रिंग इंस्टेंस होना होगा जो कि new String("..").intern()
पर कचरा इकट्ठा किया जाएगा। यह आवंटन को बचाएगा नहीं। केवल मामूली लाभ है कि बेस स्ट्रिंग जीसी पीढ़ी से नहीं टिकेगी या स्टैक पर आवंटित किया जा सकता है (हॉट स्पॉट सक्षम और लागू में बचने के विश्लेषण के साथ)।
स्रोत
2009-11-29 07:15:06
उपयोगकर्ता प्रकार फ्लाईवेट इंस्टेंस की सामान्य स्थिति को मैप करने का एक अच्छा विचार है। (हाइबरनेट और जेडीबीसी अभी भी बहुत सी घटनाएं शुरू कर देंगे। इसके चारों ओर कोई रास्ता नहीं है। कम से कम वे कचरा संग्रह काफी तेजी से होंगे।) क्या एक कंपोजिट यूज़र टाइप एक ऑब्जेक्ट में पूरे आम राज्य का प्रतिनिधित्व कर सकता है? –
हां, एक समग्र उपयोगकर्ता प्रकार शायद ऐसा कर सकता है लेकिन फिर इकाई को पहले स्थान पर एक इकाई के रूप में क्यों रखा गया है? शुरुआत से ही यह एक मूल्य वस्तु (घटक) हो। –