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

أنماط تصميم جافا سكريبت - السلوكية - الحالة

تم النشر بتاريخ 2024-08-20
تصفح:589

JavaScript Design Patterns - Behavioral - State

يسمح نمط الحالة للكائن بتغيير سلوكه عندما تتغير حالته الداخلية.

في هذا المثال، قمنا بإنشاء نمط حالة بسيط باستخدام فئة Order التي ستقوم بتحديث الحالة باستخدام طريقة next().

const ORDER_STATUS = {
  waitingForPayment: 'Waiting for payment',
  shipping: 'Shipping',
  delivered: 'Delivered',
};

class OrderStatus {
  constructor(name, nextStatus) {
    this.name = name;
    this.nextStatus = nextStatus;
  }

  next() {
    return new this.nextStatus();
  }
}

class WaitingForPayment extends OrderStatus {
  constructor() {
    super(ORDER_STATUS.waitingForPayment, Shipping);
  }
}

class Shipping extends OrderStatus {
  constructor() {
    super(ORDER_STATUS.shipping, Delivered);
  }
}

class Delivered extends OrderStatus {
  constructor() {
    super(ORDER_STATUS.delivered, Delivered);
  }
}

class Order {
  constructor() {
    this.state = new WaitingForPayment();
  }

  next() {
    this.state = this.state.next();
  }
}

export { Order };

المثال الكامل هنا؟ https://stackblitz.com/edit/vitejs-vite-6zcfql?file=state.js

خاتمة

استخدم هذا النمط عندما يعتمد سلوك الكائن على حالته، ويتغير سلوكه في وقت التشغيل اعتمادًا على تلك الحالة.


آمل أن تجدها مفيدة. شكرا على القراءة. ?

دعونا نتواصل! تجدوني على:

  • الوسيط: https://medium.com/@nhannguyndevjs/
  • تطوير: https://dev.to/nhannguyendevjs/
  • هاشنود: https://nhannguyen.hashnode.dev/
  • لينكد إن: https://www.linkedin.com/in/nhannguyendevjs/
  • X (تويتر سابقًا): https://twitter.com/nhannguyndevjs/
  • اشتري لي قهوة: https://www.buymeacoffee.com/nhannguyendevjs
بيان الافراج تم نشر هذه المقالة على: https://dev.to/nhannguyendevjs/javascript-design-patterns-behavioral-state-3e9b?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3