ஸ்ட்ரக்சரல் டிசைன் பேட்டர்ன்கள்: Facade, Flyweight, மற்றும் Proxy

ஸ்ட்ரக்சரல் டிசைன் பேட்டர்ன்கள் (Structural design patterns) வகுப்புகள் (classes) மற்றும் ஆப்ஜெக்ட்களை (objects) ஒழுங்கமைக்க உதவுகின்றன.

உங்கள் கருவித்தொகுப்பை (toolkit) முழுமையாக்க இன்று கடைசி மூன்று பேட்டர்ன்களைப் பார்க்கப் போகிறோம்.

𝟭. 𝗧𝗵𝗲 𝗙𝗮𝗰𝗮𝗱𝗲 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 Facade சிக்கலான அமைப்புகளை எளிமையாக்குகிறது. இது குழப்பமான பல வகுப்புகளுக்கு ஒரு எளிய இடைமுகத்தை (interface) வழங்குகிறது.

ஒரு சினிமா திரையரங்கை நினைத்துப் பாருங்கள். ஒரு படம் பார்க்க, நீங்கள் விளக்குகளை மங்கச் செய்ய வேண்டும், ப்ரொஜெக்டரைத் தொடங்க வேண்டும் மற்றும் திரைகளைத் திறக்க வேண்டும். ஐந்து வெவ்வேறு அமைப்புகளை அழைப்பதற்குப் பதிலாக, நீங்கள் ஒரே ஒரு முறையை (method) அழைக்கிறீர்கள்: theater.watch_movie().

இதைப் பயன்படுத்த வேண்டிய நேரங்கள்:

  • ஒரு சிக்கலான துணை அமைப்பை (subsystem) எளிமையாக்க விரும்பினால்.
  • ஒரு பெரிய API-க்கு ஒரே ஒரு நுழைவுப் புள்ளியை (entry point) நீங்கள் தேவைப்பட்டால்.
  • கிளையன்ட்களை (clients) உட்புற தர்க்கத்திலிருந்து (internal logic) பிரிக்க விரும்பினால்.

𝟮. 𝗧𝗵𝗲 𝗙𝗹𝘆𝘄𝗲𝗶𝗴𝗵𝘁 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 Flyweight நினைவகத்தைச் (memory) சேமிக்கிறது. ஆயிரக்கணக்கான ஒரே மாதிரியான ஆப்ஜெக்ட்கள் இருக்கும்போது இது பயனுள்ளதாக இருக்கும்.

ஒவ்வொரு ஆப்ஜெக்டிலும் அனைத்து விவரங்களையும் சேமிப்பதற்குப் பதிலாக, நீங்கள் தரவைப் பிரிக்கிறீர்கள். பகிரப்பட்ட, மாறாத தரவை (intrinsic state) ஒரே இடத்தில் வைத்திருப்பீர்கள். தனித்துவமான தரவை (extrinsic state) தனியாக வைத்திருப்பீர்கள்.

இதைப் பயன்படுத்த வேண்டிய நேரங்கள்:

  • நினைவகப் பயன்பாடு (Memory usage) ஒரு பெரிய பிரச்சனையாக இருக்கும்போது.
  • ஒரு டெக்ஸ்ட் எடிட்டரில் உள்ள எழுத்துக்கள் அல்லது ஒரு விளையாட்டில் உள்ள துகள்கள் (particles) போன்ற மில்லியன் கணக்கான ஒரே மாதிரியான ஆப்ஜெக்ட்களை நீங்கள் நிர்வகிக்க வேண்டியிருக்கும் போது.
  • செயல்திறனை மேம்படுத்த ஆப்ஜெக்ட் பூலிங் (object pooling) பயன்படுத்த விரும்பினால்.

𝟯. 𝗧𝗵𝗲 𝗣𝗿𝗼𝘅𝘆 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 Proxy மற்றொரு ஆப்ஜெக்ட்டிற்குப் பதிலாகச் செயல்படுகிறது. அணுகலைக் கட்டுப்படுத்த இது கிளையன்ட் மற்றும் உண்மையான ஆப்ஜெக்ட் ஆகியவற்றுக்கு இடையில் அமைகிறது.

ஒரு Proxy என்ன செய்யலாம்:

  • Lazy load: பயனர் கிளிக் செய்யும் போது மட்டுமே கனமான படங்களை ஏற்றும்.
  • அணுகலைக் கட்டுப்படுத்துதல்: ஒரு பயனர் தரவுத்தளத்தை (database) நீக்க அனுமதி உள்ளதா என்று சரிபார்க்கும்.
  • செயல்பாடுகளைப் பதிவு செய்தல் (Log activity): ஒரு குறிப்பிட்ட சேவையைப் பயன்படுத்துபவர் யார் என்பதைக் கண்காணிக்கும்.
  • முடிவுகளைச் சேமித்து வைத்தல் (Cache results): அதிகச் செலவு பிடிக்கும் தர்க்கங்களை (expensive logic) இயக்குவதற்குப் பதிலாக, சேமிக்கப்பட்ட தரவைத் திருப்பித் தரும்.

இதைப் பயன்படுத்த வேண்டிய நேரங்கள்:

  • அதிகச் செலவு பிடிக்கும் செயல்பாடுகளைத் தாமதப்படுத்த வேண்டியிருக்கும் போது.
  • ஒரு முக்கியமான சேவையைப் பாதுகாக்க வேண்டியிருக்கும் போது.
  • அசல் வகுப்பை மாற்றாமல் லாகிங் (logging) அல்லது பாதுகாப்பைச் சேர்க்க விரும்பினால்.

𝗦𝘂𝗺𝗺𝗮𝗿𝘆 𝗧𝗮𝗯𝗹𝗲

• 𝗔𝗱𝗮𝗽𝘁𝗲𝗿: பொருந்தாத அமைப்புகளை ஒன்றிணைத்துச் செயல்பட வைக்கும். • 𝗕𝗿𝗶𝗱𝗴𝗲: அப்ஸ்ட்ராக்ஷனை (abstraction) இம்ப்ளிமென்டேஷனில் (implementation) இருந்து பிரிக்கிறது. • 𝗖𝗼𝗺𝗽𝗼𝘀𝗶𝘁𝗲: மரம் போன்ற கட்டமைப்புகளை (tree structures) உருவாக்குகிறது. • 𝗗𝗲𝗰𝗼𝗿𝗮𝘁𝗼𝗿: வகுப்புகளை மாற்றாமல் புதிய செயல்பாடுகளைச் சேர்க்கிறது. • 𝗙𝗮𝗰𝗮𝗱𝗲: சிக்கலான துணை அமைப்புகளை எளிமையாக்குகிறது. • 𝗙𝗹𝘆𝘄𝗲𝗶𝗴𝗵𝘁: நினைவகத்தைச் சேமிக்கத் தரவைப் பகிர்ந்து கொள்கிறது. • 𝗣𝗿𝗼𝘅𝘆: ஆப்ஜெக்ட்களுக்கான அணுகலைக் கட்டுப்படுத்துகிறது.

பொன் விதி: குறியீட்டை (code) எளிதாகப் பராமரிக்க இந்த பேட்டர்ன்களைப் பயன்படுத்துங்கள். வெறும் திறமையைக் காட்டிக்கொள்ள மட்டும் இவற்றைத் தவிர்க்கவும்.

அடுத்து, நாம் Behavioral Design Patterns தொடரைத் தொடங்குகிறோம்.

Source: https://dev.to/mahdi0shamlou/mahdi-shamlou-structural-design-patterns-2026-facade-flyweight-proxy-production-examples-g5l