Event Bus ونمط Observer في Java: دليل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Event Bus ونمط Observer في Java

\n\n

تُبنى التطبيقات الحديثة بشكل متزايد على الهندسة المعمارية القائمة على الأحداث. أداتان رئيسيتان لتنفيذ هذا النموذج في Java هما نمط Observer وتطوره — Event Bus (ناقل الأحداث). في هذه المقالة، سنشرح كيف يختلفان، وكيفية تنفيذ كل منهما، وما هي المكتبات التي ستساعد في تبسيط التطوير.

\n\n

ما هو نمط Observer؟

\n\n

نمط Observer (المراقب) هو نمط تصميم سلوكي، حيث يقوم كائن واحد (الموضوع) بإخطار مجموعة من الكائنات التابعة (المراقبين) بتغيير حالته. في Java، يُستخدم هذا النمط غالبًا في الواجهات الرسومية، وأنظمة التسجيل، ومعالجة الأحداث.

\n\n

المكونات الرئيسية:

\n
    \n
  • Subject — مصدر الأحداث، يدير قائمة المراقبين
  • \n
  • Observer — واجهة ينفذها جميع المشتركين
  • \n
  • ConcreteSubject — تنفيذ محدد للموضوع
  • \n
  • ConcreteObserver — مراقب محدد
  • \n
\n\n

مثال على التنفيذ بلغة Java النقية:

\n\n
// واجهة المراقب\ninterface Observer {\n    void update(String event);\n}\n\n// واجهة الموضوع\ninterface Subject {\n    void attach(Observer observer);\n    void detach(Observer observer);\n    void notifyObservers(String event);\n}\n\n// موضوع محدد\nclass EventManager implements Subject {\n    private List<Observer> observers = new ArrayList<>();\n    \n    @Override\n    public void attach(Observer observer) {\n        observers.add(observer);\n    }\n    \n    @Override\n    public void detach(Observer observer) {\n        observers.remove(observer);\n    }\n    \n    @Override\n    public void notifyObservers(String event) {\n        for (Observer observer : observers) {\n            observer.update(event);\n        }\n    }\n    \n    public void fireEvent(String event) {\n        System.out.println("الحدث: " + event);\n        notifyObservers(event);\n    }\n}\n\n// مراقب محدد\nclass LogObserver implements Observer {\n    @Override\n    public void update(String event) {\n        System.out.println("سجل: تم استلام الحدث - " + event);\n    }\n}\n\n// الاستخدام\npublic class ObserverDemo {\n    public static void main(String[] args) {\n        EventManager manager = new EventManager();\n        manager.attach(new LogObserver());\n        manager.fireEvent("المستخدم قام بتسجيل الدخول");\n    }\n}
\n\n

ما هو Event Bus؟

\n\n

Event Bus (ناقل الأحداث) — هو آلية مركزية لتبادل الرسائل بين مكونات التطبيق. على عكس Observer الكلاسيكي، حيث يدير الموضوع المشتركين مباشرة، يقوم Event Bus بفصل المرسلين والمستقبلين للأحداث من خلال ناقل مشترك.

\n\n

مزايا Event Bus:

\n
    \n
  • اقتران ضعيف بين المكونات
  • \n
  • اشتراك ونشر مبسط
  • \n
  • دعم تصفية الأحداث حسب النوع
  • \n
  • معالجة غير متزامنة (اختياري)
  • \n
\n\n

مكتبة Guava EventBus

\n\n

توفر Google Guava تنفيذًا قويًا لـ Event Bus. تُستخدم على نطاق واسع في المشاريع الصناعية وسهلة التكامل.

\n\n

إضافة Maven:

\n
<dependency>\n    <groupId>com.google.guava</groupId>\n    <artifactId>guava</artifactId>\n    <version>33.0.0-jre</version>\n</dependency>
\n\n

مثال على الاستخدام:

\n\n
import com.google.common.eventbus.EventBus;\nimport com.google.common.eventbus.Subscribe;\n\n// فئة الحدث\nclass UserLoginEvent {\n    private final String username;\n    \n    public UserLoginEvent(String username) {\n        this.username = username;\n    }\n    \n    public String getUsername() {\n                    

توصيات