0Pricing
Java Academy · Pelajaran

Pola Command: Merangkum Tindakan

Bungkus permintaan sebagai objek Command untuk mendukung urungkan/ulangi dan perekaman makro.

Pola Command: Merangkum Tindakan adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Maksud Command

Command membungkus permintaan sebagai objek, sehingga klien dapat diparameterkan dengan permintaan yang berbeda, mendukung pengantrean, pencatatan, dan operasi yang dapat dibatalkan.

Antarmuka Command

Definisikan antarmuka dengan metode execute() dan, jika diperlukan, metode undo(). Setiap objek perintah mengetahui cara menjalankan dan membalikkan satu tindakan.

public interface Command {
    void execute();
    void undo();
}

Command Konkret: TextEditor

Setiap perintah konkret membungkus penerima dan parameter tindakan. execute menjalankan tindakan; undo membalikkannya.

public class InsertTextCommand implements Command {
    private final TextEditor editor;
    private final String text;
    private final int position;
    public InsertTextCommand(TextEditor editor, String text, int pos) {
        this.editor = editor; this.text = text; this.position = pos;
    }
    public void execute() { editor.insert(position, text); }
    public void undo()    { editor.delete(position, text.length()); }
}

Pemanggil: CommandHistory

Pemanggil menyimpan riwayat perintah yang telah dijalankan. Pemanggil memanggil execute() dan melakukan push ke tumpukan. Pembatalan melakukan pop dan memanggil undo().

public class CommandHistory {
    private final Deque<Command> history = new ArrayDeque<>();
    public void execute(Command cmd) {
        cmd.execute();
        history.push(cmd);
    }
    public void undo() {
        if (!history.isEmpty()) history.pop().undo();
    }
}

Tumpukan Pembatalan / Pengulangan

Tambahkan tumpukan pengulangan: saat membatalkan, lakukan push ke tumpukan pengulangan; saat mengulangi, lakukan pop dari tumpukan pengulangan lalu jalankan kembali.

private final Deque<Command> undoStack = new ArrayDeque<>();
private final Deque<Command> redoStack = new ArrayDeque<>();
public void redo() {
    if (!redoStack.isEmpty()) {
        Command cmd = redoStack.pop();
        cmd.execute();
        undoStack.push(cmd);
    }
}

Command Makro

Command makro adalah komposit yang menyimpan daftar perintah dan menjalankannya secara berurutan. undo menjalankan tindakan pembalik dalam urutan terbalik.

public class MacroCommand implements Command {
    private final List<Command> commands;
    public MacroCommand(List<Command> commands) { this.commands = commands; }
    public void execute() { commands.forEach(Command::execute); }
    public void undo()    { for (int i = commands.size()-1; i>=0; i--) commands.get(i).undo(); }
}

Antrean Command untuk Pemrosesan Tugas

Simpan perintah dalam antrean dan proses secara asinkron. Utas pekerja mengambil perintah dari antrean lalu menjalankannya—sehingga produsen tidak bergantung pada utas eksekusi.

BlockingQueue<Command> queue = new LinkedBlockingQueue<>();
// Producer:
queue.put(new SendEmailCommand(recipient, subject, body));
// Consumer thread:
Command cmd = queue.take();
cmd.execute();

Command dengan Pelaksana

Bungkus perintah sebagai lambda Runnable dan kirimkan ke ExecutorService—lambda tersebut menjadi objek perintah.

ExecutorService exec = Executors.newFixedThreadPool(4);
exec.submit(() -> sendEmail(recipient, subject));
exec.submit(() -> generateReport(params));

Pencatatan Command untuk Audit

Objek Command yang dapat diserialisasi dapat disimpan dalam log. Saat pemulihan, jalankan kembali objek tersebut untuk merekonstruksi keadaan akhir—dasar dari Sumber Peristiwa.

void execute(Command cmd) {
    cmd.execute();
    auditLog.append(cmd.toString()); // log every action
    history.push(cmd);
}

Tombol Tindakan GUI

Dalam kerangka kerja GUI, setiap tombol atau item menu menyimpan sebuah Command. Mengeklik tombol memanggil command.execute(). Ganti Command saat program berjalan untuk mengubah perilaku tombol.

Button saveBtn = new Button("Save");
saveBtn.setOnAction(() -> new SaveDocumentCommand(doc).execute());

Command vs Strategi

Keduanya membungkus perilaku. Strategi membungkus algoritme yang dapat diganti saat program berjalan. Command membungkus permintaan lengkap, termasuk parameter dan penerimanya, serta mendukung riwayat dan pengantrean.

Command di Spring

Tasklet milik Spring Batch dan MessageHandler milik Spring Integration adalah pola Command pada tingkat aplikasi. Setiap Tasklet membungkus satu langkah pekerjaan batch.

Pemeriksaan Singkat

Metode tambahan apa yang ditambahkan Command selain execute() untuk mendukung pembatalan?

Ringkasan

Command membungkus tindakan sebagai objek. Gunakan untuk tumpukan pembatalan/pengulangan, antrean tugas, perekaman makro, dan pencatatan audit. Gabungkan dengan pemanggil yang memelihara riwayat perintah.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Command: Merangkum Tindakan” gratis?

Ya — teks lengkap “Pola Command: Merangkum Tindakan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola Command: Merangkum Tindakan”?

Bungkus permintaan sebagai objek Command untuk mendukung urungkan/ulangi dan perekaman makro. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Pola Command: Merangkum Tindakan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pola Observer: Notifikasi Acara
  2. Pola Strategy: Algoritma yang Dapat Dipertukarkan
  3. Pola Command: Merangkum Tindakan
  4. Template Method: Mendefinisikan Kerangka Algoritma
← Kembali ke Java Academy