स्ट्रक्चरल डिझाइन पॅटर्न: Facade, Flyweight, आणि Proxy

स्ट्रक्चरल डिझाइन पॅटर्न तुम्हाला क्लासेस आणि ऑब्जेक्ट्स व्यवस्थित करण्यास मदत करतात.

आज आपण तुमचे टूलकिट पूर्ण करण्यासाठी शेवटच्या तीन पॅटर्नचा अभ्यास करणार आहोत.

१. द फसाड पॅटर्न (The Facade Pattern) Facade गुंतागुंतीच्या सिस्टम्सना सोपे करते. हे अनेक क्लिष्ट क्लासेससाठी एक साधा इंटरफेस प्रदान करते.

एका चित्रपटगृहाचा विचार करा. चित्रपट पाहण्यासाठी, तुम्हाला दिवे कमी करावे लागतात, प्रोजेक्टर सुरू करावा लागतो आणि पडदे उघडावे लागतात. पाच वेगवेगळ्या सिस्टम्सना कॉल करण्याऐवजी, तुम्ही फक्त एकच मेथड कॉल करता: theater.watch_movie().

याचा वापर केव्हा करावा:

  • तुम्हाला एखादी गुंतागुंतीची सबसिस्टम सोपी करायची असेल तेव्हा.
  • तुम्हाला मोठ्या API साठी एकच एन्ट्री पॉइंट हवा असेल तेव्हा.
  • तुम्हाला क्लायंट्सना अंतर्गत लॉजिकपासून वेगळे (decouple) करायचे असेल तेव्हा.

२. द फ्लायवेट पॅटर्न (The Flyweight Pattern) Flyweight मेमरी वाचवते. जेव्हा तुमच्याकडे हजारो सारखे ऑब्जेक्ट्स असतात, तेव्हा हे उपयुक्त ठरते.

प्रत्येक ऑब्जेक्टमध्ये प्रत्येक तपशील साठवण्याऐवजी, तुम्ही डेटा विभाजित करता. तुम्ही सामायिक, न बदलणारा डेटा (intrinsic state) एका ठिकाणी ठेवता आणि अद्वितीय डेटा (extrinsic state) वेगळा ठेवता.

याचा वापर केव्हा करावा:

  • जेव्हा मेमरीचा वापर ही एक मोठी समस्या असते.
  • जेव्हा तुम्ही टेक्स्ट एडिटरमधील कॅरेक्टर्स किंवा गेममधील पार्टिकल्ससारखे लाखो सारखे ऑब्जेक्ट्स मॅनेज करता.
  • परफॉर्मन्स सुधारण्यासाठी तुम्हाला ऑब्जेक्ट पूलिंग वापरायचे असेल तेव्हा.

३. द प्रॉक्सी पॅटर्न (The Proxy Pattern) Proxy दुसऱ्या ऑब्जेक्टसाठी 'स्टँड-इन' (stand-in) म्हणून काम करते. ॲक्सेस नियंत्रित करण्यासाठी ते क्लायंट आणि मूळ ऑब्जेक्टच्या मध्ये असते.

एक प्रॉक्सी खालील गोष्टी करू शकते:

  • लेझी लोड (Lazy load): युजरने क्लिक केल्यावरच जड इमेजेस लोड करणे.
  • ॲक्सेस नियंत्रित करणे: युजरला डेटाबेस डिलीट करण्याची परवानगी आहे की नाही हे तपासणे.
  • ॲक्टिव्हिटी लॉग करणे: एखादी विशिष्ट सर्व्हिस कोण वापरत आहे याचा मागोवा घेणे.
  • रिझल्ट्स कॅश (Cache) करणे: खर्चिक लॉजिक चालवण्याऐवजी साठवलेला डेटा परत करणे.

याचा वापर केव्हा करावा:

  • जेव्हा तुम्हाला खर्चिक ऑपरेशन्स उशिरा करायची असतात.
  • जेव्हा तुम्हाला एखादी संवेदनशील (sensitive) सर्व्हिस सुरक्षित ठेवायची असते.
  • मूळ क्लासमध्ये बदल न करता तुम्हाला लॉगिंग किंवा सुरक्षा जोडायची असेल तेव्हा.

सारांश तक्ता (Summary Table)

अडॅप्टर (Adapter): विसंगत सिस्टम्सना एकत्र काम करण्यास सक्षम करते. • ब्रिज (Bridge): ॲब्स्ट्रॅक्शनला इम्प्लिमेंटेशनपासून वेगळे करते. • कंपोझिट (Composite): ट्री स्ट्रक्चर्स तयार करते. • डेकोरेटर (Decorator): क्लासेसमध्ये बदल न करता नवीन बिहेव्हियर जोडते. • फसाड (Facade): गुंतागुंतीच्या सबसिस्टम्सना सोपे करते. • फ्लायवेट (Flyweight): मेमरी वाचवण्यासाठी डेटा शेअर करते. • प्रॉक्सी (Proxy): ऑब्जेक्ट्सच्या ॲक्सेसवर नियंत्रण ठेवते.

सुवर्ण नियम: कोड मेंटेनेबल (maintainable) बनवण्यासाठी या पॅटर्नचा वापर करा. केवळ प्रदर्शन करण्यासाठी त्यांचा वापर करू नका.

पुढे, आपण 'बिहेवियरल डिझाइन पॅटर्न' (Behavioral Design Patterns) मालिका सुरू करणार आहोत.

स्रोत: https://dev.to/mahdi0shamlou/mahdi-shamlou-structural-design-patterns-2026-facade-flyweight-proxy-production-examples-g5l