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) |
| يحل مشكلة | تبسيط التعامل مع نظام فرعي معقّد بعدة كلاسات متشابكة |
| الفرق عن Adapter | Adapter يجعل واجهة موجودة متوافقة مع أخرى؛ Facade يبسّط واجهة معقدة موجودة أصلاً |
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار OOP الكامل بالعربي.