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 الكامل بالعربي.