اسٹرکچرل ڈیزائن پیٹرنز: Facade، Flyweight، اور Proxy

اسٹرکچرل ڈیزائن پیٹرنز آپ کو کلاسز اور آبجیکٹس کو منظم کرنے میں مدد دیتے ہیں۔

آج ہم آپ کے ٹول کٹ کو مکمل کرنے کے لیے آخری تین پیٹرنز کا احاطہ کریں گے۔

1. Facade پیٹرن Facade پیچیدہ سسٹمز کو سادہ بنا دیتا ہے۔ یہ الجھی ہوئی کلاسز کے ایک گروپ کے لیے ایک سادہ انٹرفیس فراہم کرتا ہے۔

ایک مووی تھیٹر کے بارے میں سوچیں۔ فلم دیکھنے کے لیے، آپ کو لائٹس مدہم کرنے، پروجیکٹر شروع کرنے اور پردے کھولنے کی ضرورت ہوتی ہے۔ پانچ مختلف سسٹمز کو کال کرنے کے بجائے، آپ صرف ایک میتھڈ کال کرتے ہیں: theater.watch_movie()۔

اسے تب استعمال کریں جب:

  • آپ کسی پیچیدہ سب سسٹم کو سادہ بنانا چاہتے ہوں۔
  • آپ کو ایک بڑے API کے لیے ایک واحد انٹری پوائنٹ کی ضرورت ہو۔
  • آپ کلائنٹس کو اندرونی لاجک سے الگ (decouple) کرنا چاہتے ہوں۔

2. Flyweight پیٹرن Flyweight میموری بچاتا ہے۔ یہ اس وقت کام آتا ہے جب آپ کے پاس ہزاروں ملتے جلتے آبجیکٹس ہوں۔

ہر آبجیکٹ میں ہر تفصیل محفوظ کرنے کے بجائے، آپ ڈیٹا کو تقسیم کر دیتے ہیں۔ آپ مشترکہ، غیر متبدل ڈیٹا (intrinsic state) کو ایک جگہ رکھتے ہیں، اور منفرد ڈیٹا (extrinsic state) کو الگ رکھتے ہیں۔

اسے تب استعمال کریں جب:

  • میموری کا استعمال ایک حقیقی مسئلہ ہو۔
  • آپ لاکھوں ملتے جلتے آبجیکٹس کو مینیج کر رہے ہوں، جیسے ٹیکسٹ ایڈیٹر میں کریکٹرز یا گیم میں پارٹیکلز۔
  • آپ کارکردگی بہتر بنانے کے لیے آبجیکٹ پولنگ (object pooling) کا استعمال کرنا چاہتے ہوں۔

3. Proxy پیٹرن Proxy کسی دوسرے آبجیکٹ کے متبادل (stand-in) کے طور پر کام کرتا ہے۔ یہ رسائی (access) کو کنٹرول کرنے کے لیے کلائنٹ اور اصل آبجیکٹ کے درمیان کام کرتا ہے۔

ایک Proxy یہ کر سکتا ہے:

  • Lazy load: بھاری امیجز کو صرف اس وقت لوڈ کریں جب صارف ان پر کلک کرے۔
  • رسائی کو کنٹرول کرنا: چیک کریں کہ آیا صارف کے پاس ڈیٹا بیس ڈیلیٹ کرنے کی اجازت ہے۔
  • سرگرمیوں کا لاگ رکھنا: ٹریک کریں کہ کون سی مخصوص سروس کون استعمال کر رہا ہے۔
  • نتائج کو کیش (cache) کرنا: مہنگی لاجک چلانے کے بجائے محفوظ شدہ ڈیٹا واپس کریں۔

اسے تب استعمال کریں جب:

  • آپ کو مہنگی آپریشنز میں تاخیر کرنے کی ضرورت ہو۔
  • آپ کو کسی حساس سروس کی حفاظت کرنی ہو۔
  • آپ اصل کلاس کو تبدیل کیے بغیر لاگنگ یا سیکیورٹی شامل کرنا چاہتے ہوں۔

خلاصہ ٹیبل

Adapter: غیر مطابقت پذیر سسٹمز کو ایک ساتھ کام کرنے کے قابل بناتا ہے۔ • Bridge: ایبسٹریکشن (abstraction) کو امپلیمنٹیشن سے الگ کرتا ہے۔ • Composite: ٹری اسٹرکچرز بناتا ہے۔ • Decorator: کلاسز کو تبدیل کیے بغیر رویہ (behavior) شامل کرتا ہے۔ • Facade: پیچیدہ سب سسٹمز کو سادہ بناتا ہے۔ • Flyweight: میموری بچانے کے لیے ڈیٹا شیئر کرتا ہے۔ • Proxy: آبجیکٹس تک رسائی کو کنٹرول کرتا ہے۔

سنہری اصول: کوڈ کو برقرار رکھنے کے قابل (maintainable) بنانے کے لیے ان پیٹرنز کا استعمال کریں۔ انہیں صرف دکھاوے کے لیے استعمال نہ کریں۔

اگلا، ہم Behavioral Design Patterns سیریز شروع کریں گے۔

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