تخطَّ إلى المحتوى

Strategy

نمط الاستراتيجية Strategy

Strategy يغلّف عائلة من الخوارزميات المتبادلة في كائنات منفصلة، ويسمح بتبديل الخوارزمية المستخدَمة وقت التشغيل دون تغيير الكود المستدعي.

بدل if/else أو switch طويلة تختار السلوك حسب حالة، يحتفظ الـ Context بمرجع لكائن استراتيجية يطبّق واجهة موحدة، ويفوّض له التنفيذ. تبديل السلوك يعني فقط تمرير كائن استراتيجية مختلف — بدون تعديل الـ Context نفسه.

الصياغة

context.setStrategy(new ConcreteStrategyA());
context.execute();

📄 مثال

class CreditCardStrategy { pay(amount) { console.log(`دفع ${amount} ببطاقة`); } }
class PayPalStrategy { pay(amount) { console.log(`دفع ${amount} عبر PayPal`); } }

class Cart {
  constructor(strategy) { this.strategy = strategy; }
  checkout(amount) { this.strategy.pay(amount); }
}

const cart = new Cart(new PayPalStrategy());
cart.checkout(50); // دفع 50 عبر PayPal

أهم النقاط

النقطةالوظيفة
التصنيفنمط سلوكي (Behavioral)
يحل مشكلةif/else طويلة تختار خوارزمية أو سلوك حسب حالة
متى تتجنبهلو عندك خوارزميتان فقط ونادرًا ما تتغيران — if/else بسيط قد يكون أوضح

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار OOP الكامل بالعربي.