تخطَّ إلى المحتوى

Facade

نمط الواجهة الموحدة Facade

Facade يوفّر واجهة مبسّطة وموحّدة لنظام فرعي معقّد يتكون من عدة كلاسات متشابكة، بحيث يتعامل الكود المستخدِم مع نقطة دخول واحدة بسيطة.

لا يمنع Facade الوصول المباشر للنظام الفرعي عند الحاجة لتحكم دقيق، لكنه يوفّر مسارًا مختصرًا للحالات الشائعة. مثال: تشغيل فيديو يتطلب تنسيق قارئ ملف، محوّل ترميز (codec)، وواجهة عرض — Facade يجمع كل هذا خلف دالة playVideo() واحدة.

الصياغة

class Facade {
  constructor() { this.sub1 = new SubsystemOne(); this.sub2 = new SubsystemTwo(); }
  simpleOperation() { this.sub1.step(); this.sub2.step(); }
}

📄 مثال

class AudioMixer { setLevel(v) { console.log(`مستوى الصوت: ${v}`); } }
class VideoDecoder { decode() { console.log("فك ترميز الفيديو"); } }
class Renderer { render() { console.log("عرض على الشاشة"); } }

class VideoPlayerFacade {
  #mixer = new AudioMixer();
  #decoder = new VideoDecoder();
  #renderer = new Renderer();

  play() {
    this.#decoder.decode();
    this.#mixer.setLevel(70);
    this.#renderer.render();
  }
}

new VideoPlayerFacade().play();

أهم النقاط

النقطةالوظيفة
التصنيفنمط هيكلي (Structural)
يحل مشكلةتبسيط التعامل مع نظام فرعي معقّد بعدة كلاسات متشابكة
الفرق عن AdapterAdapter يجعل واجهة موجودة متوافقة مع أخرى؛ Facade يبسّط واجهة معقدة موجودة أصلاً

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار OOP الكامل بالعربي.