أنماط التصميم في JavaScript: أمثلة لـ Node.js

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

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

ابدأ الدورة

أنماط التصميم في JavaScript مع أمثلة لـ Node.js



أنماط التصميم هي حلول مجربة للمشكلات النمطية في التطوير. في JavaScript، خاصة في بيئة Node.js، تساعد في إنشاء كود قابل للتوسع والصيانة وإعادة الاستخدام. في هذا المقال، سنشرح أربعة أنماط رئيسية: Singleton و Factory و Observer و Module، مع أمثلة عملية.



1. نمط Singleton (المفرد)



يضمن Singleton أن يكون للفصل نسخة واحدة فقط، ويوفر نقطة وصول عالمية إليها. في Node.js، يُستخدم هذا غالبًا للاتصال بقاعدة البيانات أو إعدادات التطبيق.



تنفيذ Singleton في Node.js



class Database {  constructor() {    if (Database.instance) {      return Database.instance;    }    this.connection = null;    Database.instance = this;  }

async connect(uri) { // محاكاة الاتصال بقاعدة البيانات this.connection = `Connected to ${uri}`; console.log(this.connection); }

getConnection() { return this.connection; }}

// الاستخدامconst db1 = new Database();const db2 = new Database();

console.log(db1 === db2); // true

db1.connect('mongodb://localhost:27017/myapp');console.log(db2.getConnection()); // "Connected to mongodb://localhost:27017/myapp"


متى يُستخدم: إدارة تجمع الاتصالات، مسجل عالمي، أنظمة التخزين المؤقت.



2. نمط Factory (المصنع)



يسمح Factory بإنشاء كائنات دون تحديد الفئة المحددة. يقوم بمركزة منطق إنشاء الكائنات، مما يبسط صيانة الكود.



تنفيذ Factory للمدققين



class EmailValidator {  validate(value) {    return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);  }}

class PhoneValidator { validate(value) { return /^\\+?[\\d\\s\\-()]{7,15}$/.test(value); }}

class ValidatorFactory { createValidator(type) { switch (type) { case 'email': return new EmailValidator(); case 'phone': return new PhoneValidator(); default: throw new Error('Unknown validator type'); } }}

// الاستخدامconst factory = new ValidatorFactory();const emailValidator = factory.createValidator('email');

console.log(emailValidator.validate('test@example.com')); // trueconsole.log(emailValidator.validate('invalid')); // false


متى يُستخدم: إنشاء كائنات معقدة، العمل مع تنسيقات بيانات مختلفة (JSON, XML, YAML)، توليد مكونات واجهة المستخدم.



3. نمط Observer (المراقب)



ينشئ Observer آلية اشتراك، تسمح لكائنات (مراقبين) بتتبع التغييرات في كائن آخر (الموضوع). في Node.js، هذا النمط مدمج عبر الفئة EventEmitter.



تنفيذ Observer مع EventEmitter



const EventEmitter = require('events');

class NewsPublisher extends EventEmitter { publishArticle(title) { console.log(`📰 تم نشر المقال: ${title}`); this.emit('article', { title, date: new Date() }); }}

class Subscriber { constructor(name) { this.name = name; }

receiveArticle(article) { console.log(`🔔 ${this.name} استلم: "${article.title}"`); }}

// الاستخدامconst publisher = new NewsPublisher();const subscriber1 = new Subscriber('آنا');const subscriber2 = new Subscriber('إيفان');

publisher.on('article', (data) => subscriber1.receiveArticle(data));publisher.on('article', (data) => subscriber2.receiveArticle(data));

publisher.publishArticle('أنماط التصميم في JavaScript');// الإخراج:// 📰 تم نشر المقال: أنماط التصميم في JavaScript// 🔔 آنا استلم: "أنماط التصميم في JavaScript"// 🔔 إيفان استلم: "أنماط التصميم في JavaScript"


متى يُستخدم

المدونات

توصيات الكتب