BEHAVIORAL PATTERN

Command Pattern

نمط الأوامر

يعني إيه؟ زي الـ ريموت كنترول! كل زرار بينفذ أمر معين.
ممكن تحفظ الأوامر وتعمل Undo/Redo! ↩️

THE CONCEPT

مثال الريموت 📺

الريموت مش عارف الجهاز - بيبعت أوامر بس! Remote (Invoker) «interface» Command TurnOnCommand execute() → TV.on() TurnOffCommand execute() → TV.off() VolumeUpCommand execute() → TV.volumeUp() 📺 TV (Receiver) on(), off(), volumeUp() ✅ الريموت بيبعت Command - مش عارف التلفزيون يعمل إيه بالظبط!

📺 Invoker (الريموت)

الريموت مش عارف الجهاز يشتغل إزاي - بس بيضغط على Commands.

📜 Command

كل أمر ملفوف في Object - عنده execute() و ممكن undo()!

📺 Receiver (التلفزيون)

الجهاز اللي بينفذ العمل الفعلي - on(), off(), volumeUp().

الكود 💻

Command.js
// Receiver - الجهاز
class TV {
  on() { return "📺 TV is ON"; }
  off() { return "📺 TV is OFF"; }
  volumeUp() { return "🔊 Volume UP"; }
}

// Command Interface
class Command {
  execute() { throw "implement!"; }
  undo() { throw "implement!"; }
}

// Concrete Commands
class TurnOnCommand extends Command {
  constructor(tv) { super(); this.tv = tv; }
  execute() { return this.tv.on(); }
  undo() { return this.tv.off(); } // الـ Undo!
}

class VolumeUpCommand extends Command {
  constructor(tv) { super(); this.tv = tv; }
  execute() { return this.tv.volumeUp(); }
}

// Invoker - الريموت
class Remote {
  constructor() { this.history = []; }
  
  setCommand(cmd) { this.command = cmd; }
  
  press() {
    this.history.push(this.command);
    return this.command.execute();
  }
  
  undo() {
    const cmd = this.history.pop();
    return cmd ? cmd.undo() : "Nothing to undo!";
  }
}

جرب! 🎮

📺
// اضغط على الأزرار!
Strategy State