شرح Facade Design Pattern بالتفصيل مع مثال عملي في Java
يُعد Facade Design Pattern أحد أهم أنماط التصميم الهيكلية (Structural Design Patterns) في البرمجة كائنية التوجه (OOP) وهو يستخدم بكثره في عدد كبير من المشاريع، حيث يهدف إلى تبسيط الأنظمة المعقدة من خلال توفير واجهة موحدة وسهلة الاستخدام للتعامل مع عدة أنظمة فرعية في آنٍ واحد دون التاثير علي اي قطع اخر في الكود.
في هذا المقال سنشرح النمط بالتفصيل، ونوضح الفرق بين استخدامه وعدم استخدامه، مع مثال عملي يحاكي نظام دفع إلكتروني باستخدام لغة Java، بالإضافة إلى عرض المميزات والعيوب وحالات الاستخدام الواقعية.
ما هو Facade Design Pattern؟
بدلاً من أن يتعامل العميل (Client) مباشرة مع عدة كائنات مختلفة، يقوم بالتعامل مع كائن واحد فقط وهو الـ Facade.
لماذا نحتاج إلى Facade Pattern؟
مثال عملي: نظام دفع إلكتروني بدون Facade Pattern
class PaymentProcessor {
public void processCreditCard() {
System.out.println("Processing Credit Card Payment...");
}
public void processPayPal() {
System.out.println("Processing PayPal Payment...");
}
}
class IdentityVerification {
public void verifyIdentity() {
System.out.println("Verifying User Identity...");
}
}
class NotificationService {
public void sendNotification() {
System.out.println("Sending Payment Notification...");
}
}
public class Main {
public static void main(String[] args) {
PaymentProcessor paymentProcessor = new PaymentProcessor();
IdentityVerification identityVerification = new IdentityVerification();
NotificationService notificationService = new NotificationService();
identityVerification.verifyIdentity();
paymentProcessor.processCreditCard();
notificationService.sendNotification();
}
}
عيوب هذا النهج بدون Facade Pattern
تطبيق Facade Design Pattern
// Facade Class
class PaymentFacade {
private PaymentProcessor paymentProcessor;
private IdentityVerification identityVerification;
private NotificationService notificationService;
public PaymentFacade() {
this.paymentProcessor = new PaymentProcessor();
this.identityVerification = new IdentityVerification();
this.notificationService = new NotificationService();
}
public void processPayment() {
identityVerification.verifyIdentity();
paymentProcessor.processCreditCard();
notificationService.sendNotification();
}
}
class PaymentProcessor {
public void processCreditCard() {
System.out.println("Processing Credit Card Payment...");
}
public void processPayPal() {
System.out.println("Processing PayPal Payment...");
}
}
class IdentityVerification {
public void verifyIdentity() {
System.out.println("Verifying User Identity...");
}
}
class NotificationService {
public void sendNotification() {
System.out.println("Sending Payment Notification...");
}
}
public class Main {
public static void main(String[] args) {
PaymentFacade paymentFacade = new PaymentFacade();
paymentFacade.processPayment();
}
}
الفرق بين الطريقتين
بدون Facade Pattern
مع Facade Pattern
مميزات Facade Design Pattern
العيوب. – زيادة التبعية على كلاس الواجهة – إخفاء بعض التفاصيل المهمة – قد يزيد عدد الكلاسات في المشاريع الصغيرة بدون فائدة حقيقية
متى نستخدم Facade Pattern؟
تطبيق واقعي في Flutter
الخلاصة
يمكن تشبيهه بمجموعة موظفين يعملون تحت اسم شركة واحدة؛ بدلاً من التواصل مع كل موظف على حدة، تتعامل مع الشركة فقط من اجل التناسق بينهم.
عند استخدامه بالشكل الصحيح، سيجعل مشروعك أكثر تنظيمًا وقابلية للصيانة وأسهل في التوسع مستقبلاً.
يمكنك التعرف علي شرح Builder Design Pattern بالتفصيل مع مثال توضيحي ومعرفة العيوب والمميزات المصدر



