نمط واجهة المبنى  نمط واجهة المبنى (يلفظ (فساد) "façade أيضاً") هو نمط تصميم برامج شائع الاستخدام في البرمجة كائنية التوجه. تشبه الواجهة في العمارة، الواجهة هي كائن يعمل كواجهة أمامية تخفي كودًا أساسيًا أو بنيويًا أكثر تعقيدًا. يمكن للواجهة:   غالبًا ما يستخدم المطورون نمط تصميم الواجهة عندما يكون النظام معقدًا للغاية أو يصعب فهمه لأن النظام يحتوي على العديد من الأصناف المترابطة أو لأن الكود المصدري غير متوفر. يخفي هذا النمط تعقيدات النظام الأكبر ويوفر واجهة أبسط للعميل. وعادةً ما تتضمن صنف مغلّف واحد يحتوي على مجموعة من الأعضاء التي يطلبها العميل. يدخل هؤلاء الأعضاء إلى النظام نيابة عن عميل الواجهة ويخفي تفاصيل التنفيذ.  نمط تصميم الواجهة هو واحد من ثلاثة وعشرون نمطًا من "أنماط تصميم GoF" المعروفة التي تصف كيفية حل مشاكل التصميم المتكررة لتصميم برنامج مرن وقابل لإعادة الاستخدام، أي الكائنات التي يسهل تنفيذها، وتغييرها، اختبار وإعادة استخدامها.  ما هي المشاكل التي يمكن أن يحلها نمط تصميم الواجهة؟   يشير العملاء الذين يصلون إلى نظام فرعي معقد مباشرة (يعتمد على) العديد من الكائنات المختلفة التي لها واجهات مختلفة (اقتران ضيق)، مما يجعل العملاء صعب التنفيذ والتغيير والاختبار وإعادة الاستخدام.  ما الحل الذي يصفه نمط تصميم الواجهة؟  تعريف كائن واجهة codice_1 من أجل ذلك.   يتيح هذا العمل من خلال كائن واجهة codice_1 لتقليل التبعيات على نظام فرعي. انظر أيضًا صنف UML ومخطط التسلسل أدناه.  يتم استخدام الواجهة عند الرغبة في استخدام واجهة أسهل أو أبسط لكائن أساسي. بدلاً من ذلك، يمكن استخدام محول عندما يجب أن يلتزم الغلاف بواجهة معينة ويجب أن يدعم السلوك متعدد الأشكال. يجعل الديكور من الممكن إضافة أو تغيير سلوك واجهة في وقت التشغيل.  عادة ما يتم استخدام نمط الواجهة عندما   في الرسم التخطيطي لصنف UML أعلاه، لا يصل صنف codice_3 إلى أصناف النظام الفرعي مباشرة. بدلاً من ذلك، يعمل العميل codice_3 من خلال صنف الواجهة codice_1 التي تطبق واجهة بسيطة من حيث (عن طريق التفويض إلى) أصناف النظام الفرعي ( codice_6 و codice_7 و codice_8 ). يعتمد codice_3 فقط على واجهة codice_1 البسيطة وهو مستقل عن النظام الفرعي المعقد. يعرض الرسم التخطيطي للتسلسل تفاعلات وقت التشغيل: يعمل كائن عميل codice_3 خلال كائن واجهة codice_1 الذي يفوض الطلب إلى مثيلات الأصناف التالية codice_6 و codice_7 و codice_8 التي تقوم بتنفيذ الطلب.   هذا مثال تجريدي لكيفية تفاعل العميل ("you") مع واجهة ("computer") لنظام معقد (أجزاء الكمبيوتر الداخلية، مثل وحدة المعالجة المركزية والأجهزة).  class CPU {  public:  class HardDrive {  class Memory {  // Facade: class ComputerFacade {  int main() {  namespace DesignPattern.Facade  namespace DesignPattern.Facade.Sample  /* Comp  class CPU {  class HardDrive {  class Memory {  /* Facade */  class ComputerFacade {  /* Client */  class You { class CPU  def freeze; end end class Memory end  class HardDrive end  class ComputerFacade  end  computer_facade = ComputerFacade.new computer_facade.start  * The complicated, underlying logic. class CPU  class Memory  class HardDrive  class ComputerFacade  $computer = new ComputerFacade; $computer->start(); Facade pattern example. class CPU(object):  class Memory(object):  class SolidStateDrive(object):  class ComputerFacade(object):  computer_facade = ComputerFacade() computer_facade.start() Freezing processor. Loading from 0x00 data: 'Some data from sector 100 with size 1024'. Jumping to: 0x00 Executing.  Facade pattern example. class CPU {  class Memory {  class HardDrive {  class Computer {  $façade = [Computer]::new()  $façade.StartComputer() CPU freezing HardDrive read 0 1024 Memory load 0 (some data) CPU jump to 10 CPU execute