تكرار السؤال: …
الإجابة المختصرة
يقوم Command بتغليف الطلب أو العملية بالكامل ككائن مستقل يحتوي على جميع البيانات اللازمة لتنفيذه أو التراجع عنه في وقت لاحق.
الشرح
بدلاً من استدعاء دوال الحفظ أو الحذف مباشرة من واجهة المستخدم، يتم إنشاء كائن أمر يطبق واجهة Command التي تحتوي على execute() و undo(). يتيح ذلك للبرنامج الاحتفاظ بسجل تاريخي (History Stack) من الأوامر المنفذة. للتراجع (Undo)، يتم سحب آخر أمر واستدعاء undo() عليه، وللإعادة (Redo)، يُعاد استدعاء execute(). كما يتيح هذا النمط تخزين الأوامر في طوابير (Queues) وتنفيذها في الخلفية.
مثال بالكود
interface Command {
execute(): void;
undo(): void;
}
class InsertTextCommand implements Command {
constructor(private doc: Document, private text: string) {}
execute() { this.doc.append(this.text); }
undo() { this.doc.removeLast(this.text.length); }
}أخطاء شائعة
- تخزين حالة ضخمة جداً داخل كائن الأمر مما يؤدي لاستهلاك الذاكرة عند الاحتفاظ بسجل تراجع طويل.