"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فهم نمط تصميم PubSub (النشر والاشتراك) في JavaScript

فهم نمط تصميم PubSub (النشر والاشتراك) في JavaScript

تم النشر بتاريخ 2024-10-31
تصفح:457

Understanding the PubSub (Publish-Subscribe) Design Pattern in JavaScript

نمط النشر والاشتراك (PubSub) هو نمط تصميم شائع يستخدم لتسهيل الاتصال بين الأجزاء المختلفة للتطبيق دون الحاجة إلى التعرف على بعضها البعض بشكل مباشر. يعد هذا النمط مفيدًا بشكل خاص لفصل المكونات في التطبيقات واسعة النطاق، حيث يمكن نشر الأحداث ويمكن للمشتركين التفاعل مع هذه الأحداث.

في هذه المقالة، سنستكشف كيفية تنفيذ نمط PubSub في JavaScript باستخدام كل من النهج القائم على الكائنات والمنهج القائم على الفصل. في النهاية، سيكون لديك فهم قوي لكيفية استخدام هذا النمط في مشاريعك الخاصة.

التنفيذ القائم على الكائنات
يعد النهج القائم على الكائنات بسيطًا وفعالًا بالنسبة للسيناريوهات التي يكون فيها مدير حدث عالمي واحد كافيًا. وإليك كيفية تنفيذ ذلك:

pubsub.js
const PubSub = {
    subscribers: [],

    subscribe: function(subscriber) {
        this.subscribers.push(subscriber);
    },

    publish: function(payload) {
        this.subscribers.forEach(subscriber => {
            subscriber(payload);
        });
    }
};

export default PubSub;

كيفية استخدام PubSub المستند إلى الكائنات
في التطبيق الخاص بك، يمكنك استيراد كائن PubSub أينما كنت في حاجة إليه. إليك مثال:

// file1.js
import PubSub from './pubsub';

PubSub.subscribe((payload) => {
    console.log('File 1 received:', payload);
});
// file2.js
import PubSub from './pubsub';

PubSub.subscribe((payload) => {
    console.log('File 2 received:', payload);
});
// main.js
import PubSub from './pubsub';

PubSub.publish('Hello from main!');

التنفيذ على أساس الفصل
لمزيد من المرونة أو عندما تحتاج إلى مثيلات متعددة لنظام PubSub، يمكن استخدام أسلوب قائم على الفصل. يتيح لك هذا إنشاء مثيلات PubSub مستقلة مع قائمة المشتركين الخاصة بها.

class PubSub {
    constructor() {
        this.subscribers = [];
    }

    subscribe(subscriber) {
        this.subscribers.push(subscriber);
    }

    unsubscribe(subscriber) {
        this.subscribers = this.subscribers.filter(sub => sub !== subscriber);
    }

    publish(payload) {
        this.subscribers.forEach(subscriber => {
            try {
                subscriber(payload);
            } catch (error) {
                console.error('Error in subscriber:', error);
            }
        });
    }
}

export default PubSub;

كيفية استخدام PubSub على أساس الفصل الدراسي
فيما يلي مثال لكيفية استخدام نمط PubSub القائم على الفصل في تطبيقك:

import PubSub from './pubsub';

// Create an instance of PubSub
const pubSubInstance = new PubSub();

// Subscribe to events
pubSubInstance.subscribe((payload) => {
    console.log('Instance 1 received:', payload);
});

pubSubInstance.subscribe((payload) => {
    console.log('Instance 2 received:', payload);
});

// Publish an event
pubSubInstance.publish('Hello from instance!');

خاتمة
يعد نمط PubSub أداة قوية لإدارة الاتصال بين الأجزاء المختلفة لتطبيقك. يعتمد اختيارك لاستخدام تطبيق قائم على الكائن أو على الفصل على احتياجاتك المحددة. يعتبر النهج القائم على الكائنات بسيطًا ومباشرًا، ومثاليًا للمشاريع الصغيرة أو عندما يكفي مدير حدث عالمي واحد. من ناحية أخرى، يوفر النهج القائم على الفصل مزيدًا من المرونة وهو أكثر ملاءمة للتطبيقات الأكبر حجمًا حيث قد تحتاج إلى مثيلات متعددة لنظام PubSub.

لا تتردد في استخدام هذه الأمثلة في مشاريعك الخاصة وتعديلها لتناسب احتياجاتك. برمجة سعيدة!

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/ashok_24_99c5ee15c6ad5150/understanding-the-pubsub-publish-subscribe-design-pattern-in-javascript-3o35?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3