تكرار السؤال: …
الإجابة المختصرة
يكمن الفرق في النية البرمجية (Intent): الاستراتيجية تمثل خوارزميات مستقلة يختار العميل إحداها، بينما الحالة تمثل سلوكاً داخلياً يتغير تلقائياً مع تغير الحالة الداخلية للكائن دون علم العميل.
الشرح
في نمط Strategy، تكون الاستراتيجيات المختلفة غير واعية بوجود بعضها ولا تقرر التبديل بينها؛ بل يحدد المستدعي الخوارزمية المطلوبة (مثل استراتيجية الدفع: نقدي أو بطاقة). أما في نمط State، فإن حالات الكائن المختلفة تعرف بعضها وتتولى الانتقال التلقائي من حالة إلى أخرى (مثل دورة حياة الطلب: Draft -> Paid -> Shipped).
مثال بالكود
// State: الحالة تنتقل داخلياً
class DraftState implements OrderState {
next(order: Order) { order.setState(new PaidState()); }
}
// Strategy: العميل يمرر الخوارزمية
const sorter = new Sorter(new QuickSortStrategy());أخطاء شائعة
- استخدام سلاسل if/else عملاقة لإدارة الحالات المعقدة، مما يسبب تعقيداً شديداً وصعوبة في إضافة حالات جديدة.