𝗦𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗮𝗹 𝗗𝗲𝘀𝗶𝗴𝗻 𝗣𝗮𝘁𝘁𝗲𝗿𝗻𝘀: 𝗙𝗮𝗰𝗮𝗱𝗲, 𝗙𝗹𝘆𝘄𝗲𝗶𝗴𝗵𝘁, 𝗮𝗻𝗱 𝗣𝗿𝗼𝘅𝘆
స్ట్రక్చరల్ డిజైన్ ప్యాటర్న్స్ క్లాసెస్ మరియు ఆబ్జెక్ట్లను క్రమబద్ధీకరించడానికి మీకు సహాయపడతాయి.
మీ టూల్కిట్ను పూర్తి చేయడానికి ఈరోజు మనం చివరి మూడు ప్యాటర్న్స్ను కవర్ చేస్తున్నాము.
𝟭. 𝗧𝗵𝗲 𝗙𝗮𝗰𝗮𝗱𝗲 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 Facade సంక్లిష్టమైన సిస్టమ్లను సరళీకరిస్తుంది. ఇది అనేక క్లిష్టమైన క్లాసుల సమూహానికి ఒకే ఒక సరళమైన ఇంటర్ఫేస్ను అందిస్తుంది.
ఒక మూవీ థియేటర్ను ఊహించుకోండి. సినిమా చూడటానికి, మీరు లైట్లు తగ్గించాలి, ప్రొజెక్టర్ను ప్రారంభించాలి మరియు తెరలను తెరవాలి. ఐదు వేర్వేరు సిస్టమ్లను పిలవడానికి బదులుగా, మీరు ఒకే ఒక మెథడ్ను పిలుస్తారు: theater.watch_movie().
దీనిని ఎప్పుడు ఉపయోగించాలి:
- మీరు ఒక సంక్లిష్టమైన సబ్సిస్టమ్ను సరళీకరించాలనుకున్నప్పుడు.
- ఒక పెద్ద API కోసం మీకు ఒకే ఒక ఎంట్రీ పాయింట్ కావాలనుకున్నప్పుడు.
- క్లయింట్లను ఇంటర్నల్ లాజిక్ నుండి వేరు చేయాలనుకున్నప్పుడు (decouple).
𝟮. 𝗧𝗵𝗲 𝗙𝗹𝘆𝘄𝗲𝗶𝗴𝗵𝘁 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 Flyweight మెమరీని ఆదా చేస్తుంది. వేల సంఖ్యలో ఒకే రకమైన ఆబ్జెక్ట్లు ఉన్నప్పుడు ఇది ఉపయోగపడుతుంది.
ప్రతి ఆబ్జెక్ట్లో ప్రతి వివరాలను నిల్వ చేసే బదులు, మీరు డేటాను విభజిస్తారు. మీరు పంచుకోదగిన, మార్పులేని డేటాను (intrinsic state) ఒకే చోట ఉంచుతారు. ప్రత్యేకమైన డేటాను (extrinsic state) విడిగా ఉంచుతారు.
దీనిని ఎప్పుడు ఉపయోగించాలి:
- మెమరీ వినియోగం ఒక సమస్యగా ఉన్నప్పుడు.
- టెక్స్ట్ ఎడిటర్లోని క్యారెక్టర్లు లేదా గేమ్లోని పార్టికల్స్ వంటి మిలియన్ల కొద్దీ ఒకే రకమైన ఆబ్జెక్ట్లను మీరు నిర్వహించాల్సి వచ్చినప్పుడు.
- పనితీరును మెరుగుపరచడానికి ఆబ్జెక్ట్ పూలింగ్ను ఉపయోగించాలనుకున్నప్పుడు.
𝟯. 𝗧𝗵𝗲 𝗣𝗿𝗼𝘅𝘆 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 Proxy మరొక ఆబ్జెక్ట్కు ప్రతినిధిగా (stand-in) పనిచేస్తుంది. యాక్సెస్ను నియంత్రించడానికి ఇది క్లయింట్ మరియు అసలు ఆబ్జెక్ట్ మధ్య ఉంటుంది.
ఒక Proxy చేయగలిగేవి:
- Lazy load: యూజర్ క్లిక్ చేసినప్పుడు మాత్రమే భారీ చిత్రాలను (heavy images) లోడ్ చేయడం.
- Control access: డేటాబేస్ను తొలగించడానికి యూజర్కు అనుమతి ఉందో లేదో తనిఖీ చేయడం.
- Log activity: ఒక నిర్దిష్ట సేవను ఎవరు ఉపయోగిస్తున్నారో ట్రాక్ చేయడం.
- Cache results: ఖరీదైన లాజిక్ను రన్ చేసే బదులు సేవ్ చేసిన డేటాను తిరిగి ఇవ్వడం.
దీనిని ఎప్పుడు ఉపయోగించాలి:
- ఖరీదైన ఆపరేషన్లను ఆలస్యం చేయాల్సి వచ్చినప్పుడు.
- సెన్సిటివ్ సర్వీస్ను రక్షించాల్సి వచ్చినప్పుడు.
- అసలు క్లాస్ను మార్చకుండా లాగింగ్ లేదా సెక్యూరిటీని జోడించాలనుకున్నప్పుడు.
𝗦𝘂𝗺𝗺𝗮𝗿𝘆 𝗧𝗮𝗯𝗹𝗲
• 𝗔𝗱𝗮𝗽𝘁𝗲𝗿: ఒకదానితో ఒకటి సరిపోని సిస్టమ్లు కలిసి పనిచేసేలా చేస్తుంది. • 𝗕𝗿𝗶𝗱𝗴𝗲: అబ్స్ట్రాక్షన్ను ఇంప్లిమెంటేషన్ నుండి వేరు చేస్తుంది. • 𝗖𝗼𝗺𝗽𝗼𝘀𝗶𝘁𝗲: ట్రీ స్ట్రక్చర్లను నిర్మిస్తుంది. • 𝗗𝗲𝗰𝗼𝗿𝗮𝘁𝗼𝗿: క్లాసులను మార్చకుండా కొత్త ప్రవర్తనను (behavior) జోడిస్తుంది. • 𝗙𝗮𝗰𝗮𝗱𝗲: సంక్లిష్టమైన సబ్సిస్టమ్లను సరళీకరిస్తుంది. • 𝗙𝗹𝘆𝘄𝗲𝗶𝗴𝗵𝘁: మెమరీని ఆదా చేయడానికి డేటాను పంచుకుంటుంది. • 𝗣𝗿𝗼𝘅𝘆: ఆబ్జెక్ట్లకు యాక్సెస్ను నియంత్రిస్తుంది.
గోల్డెన్ రూల్: కోడ్ను మెయింటైన్ చేసేలా చేయడానికి ఈ ప్యాటర్న్స్ను ఉపయోగించండి. కేవలం ప్రదర్శన కోసం వీటిని ఉపయోగించకండి.
తదుపరి, మనం బిహేవియరల్ డిజైన్ ప్యాటర్న్స్ (Behavioral Design Patterns) సిరీస్ను ప్రారంభిస్తాము.