फ्लाईवेट पैटर्न का उपयोग करने का उद्देश्य अनावश्यक वस्तु की शुरुआत से बचना है और इस प्रकार अंतरिक्ष को बचाना है। GOF द्वारा परिभाषित के रूप में , एक वस्तु के दो राज्य हो सकते हैं, आंतरिक और बाहरी राज्य:
- आंतरिक स्थिति: फ्लाईवेट में संग्रहीत होती है; इसमें फ्लाईवेइट्स के संदर्भ में स्वतंत्र होने वाली जानकारी शामिल है, जिससे यह साझा करने योग्य है।
- बाहरी स्थिति: फ्लाईवेट के संदर्भ पर निर्भर करता है और बदलता रहता है इसलिए इसे साझा नहीं किया जा सकता। क्लाइंट ऑब्जेक्ट बाहरी राज्य को फ़्लाइवेट पर जाने के लिए ज़िम्मेदार होते हैं जब उसे इसकी आवश्यकता होती है।
यह मानते हुए कि हम एक साधारण टेक्स्ट एडिटर एप्लिकेशन विकसित करना चाहते हैं, जहां प्रत्येक कॉलम में टेक्स्ट की सभी पंक्तियाँ हों और पंक्ति में अक्षर हो सकते हैं।
यहाँ दुविधा यह है कि चरित्र वर्ग को कैसे डिज़ाइन किया जाए। char c
चरित्र वर्ग के भीतर मुख्य (आंतरिक राज्य) वस्तु होना चाहिए। हालाँकि, एक चार में फ़ॉन्ट और आकार (बाहरी स्थिति) हो सकता है; इस प्रकार हमें पंक्ति (क्लाइंट) पर इसकी बाहरी स्थिति को संग्रहीत करने और आवश्यकता पड़ने पर इसे एक्सेस करने की आवश्यकता है। इस प्रयोजन के लिए, दो सूचियाँ जो फॉन्ट को स्टोर करती हैं और आकार बनाई जाती हैं।
फ्लाईवेट पैटर्न का पालन करके, चरित्र अब पुन: प्रयोज्य है और वस्तुओं को वस्तुओं की एक विशिष्ट सूची (फ्लाईवेट पूल) से संदर्भित किया जा रहा है जिसमें सभी ASCII प्रतीक ( Character
ऑब्जेक्ट) शामिल हैं।
यहाँ मैं नेत्रहीन वर्णित है:
'हैलो' को प्रिंट करने के लिए, केवल 4 Character
ऑब्जेक्ट्स की आवश्यकता होती है, 5. इसके बजाय फ़ॉन्ट बदलने के बाद, कोई नई ऑब्जेक्ट की आवश्यकता नहीं होती है; ध्यान दें कि यह संभव नहीं होगा, हमने वर्णनात्मक वर्ग को वर्ण वर्ग पर संग्रहीत किया है, जैसे,
class Character
{
char c;
int Size;
Font font;
....
}
बड़े डेटासेट पर इस पैटर्न को लागू करने से एप्लिकेशन और ऑब्जेक्ट पुन: प्रयोज्य की मेमोरी जटिलता पर महत्वपूर्ण अनुकूलन होगा ।