Command Kalıbı: Eylemleri Kapsülleme
Geri alma/yineleme ve makro kaydını desteklemek için istekleri Command nesneleri olarak sarın.
Command Kalıbı: Eylemleri Kapsülleme, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Command'ın Amacı
Command, bir isteği nesne olarak kapsüller; istemcilerin farklı isteklerle parametreleştirilmesini, sıraya almayı, günlüğe kaydetmeyi ve geri alınabilir işlemleri mümkün kılar.
Command Arayüzü
Bir execute() yöntemi ve isteğe bağlı olarak bir undo() yöntemi içeren bir arayüz tanımlayın. Her Command nesnesi, bir eylemin nasıl gerçekleştirileceğini ve geri alınacağını bilir.
public interface Command {
void execute();
void undo();
}Somut Command: TextEditor
Her somut Command, bir alıcıyı ve eylemin parametrelerini kapsüller. Execute eylemi gerçekleştirir; undo eylemi geri alır.
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()); }
}Çağırıcı: CommandHistory
Çağırıcı, yürütülen Command'ların geçmişini tutar. execute() yöntemini çağırır ve Command'ı bir yığına ekler. Geri alma işleminde yığından çıkarır ve undo() yöntemini çağırır.
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();
}
}Geri Alma / Yineleme Yığını
Bir yineleme yığını ekleyin: geri alma sırasında öğeyi yineleme yığınına ekleyin; yineleme sırasında öğeyi yineleme yığınından çıkarıp yeniden yürütün.
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);
}
}Makro Command
Makro Command, bir Command listesini tutan ve bunları sırayla yürüten bileşik bir yapıdır. Geri alma işlemi, ters eylemleri ters sırayla yürütür.
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(); }
}Görev İşleme için Command Kuyruğu
Command'ları bir kuyrukta depolayıp eşzamansız olarak işleyin. Bir işçi iş parçacığı Command'ları kuyruktan çıkarır ve yürütür; böylece üreticiler yürütme iş parçacığından ayrılır.
BlockingQueue<Command> queue = new LinkedBlockingQueue<>();
// Producer:
queue.put(new SendEmailCommand(recipient, subject, body));
// Consumer thread:
Command cmd = queue.take();
cmd.execute();Yürütücü ile Command
Command'ları Runnable lambda ifadeleri olarak sarıp bir ExecutorService'e gönderin; lambda, Command nesnesi olarak görev yapar.
ExecutorService exec = Executors.newFixedThreadPool(4);
exec.submit(() -> sendEmail(recipient, subject));
exec.submit(() -> generateReport(params));Denetim için Command'ları Günlüğe Kaydetme
Serileştirilebilir Command nesneleri bir günlüğe kalıcı olarak kaydedilebilir. Kurtarma sırasında son durumu yeniden oluşturmak için bunları yeniden yürütün; bu, Olay Kaynaklamanın temelidir.
void execute(Command cmd) {
cmd.execute();
auditLog.append(cmd.toString()); // log every action
history.push(cmd);
}GUI Eylem Düğmeleri
GUI çerçevelerinde her düğme veya menü öğesi bir Command tutar. Düğmeye tıklamak command.execute() çağrısını yapar. Düğmenin davranışını değiştirmek için Command'ları çalışma zamanında değiştirin.
Button saveBtn = new Button("Save");
saveBtn.setOnAction(() -> new SaveDocumentCommand(doc).execute());Command ve Strateji
Her ikisi de davranışı kapsüller. Strateji, çalışma zamanında değiştirilebilen bir algoritmayı kapsüller. Command ise parametreleri ve alıcısı da dâhil olmak üzere eksiksiz bir isteği kapsüller; geçmiş ve sıraya alma desteği sağlar.
Spring'de Command
Spring Batch'in Tasklet'i ve Spring Integration'ın MessageHandler'ı, uygulama düzeyindeki Command kalıplarıdır. Her Tasklet, bir toplu işin tek bir adımını kapsüller.
Hızlı Kontrol
Geri almayı desteklemek için Command, execute() yöntemine ek olarak hangi yöntemi ekler?
Özet
Command, eylemleri nesneler olarak kapsüller. Geri alma/yineleme yığınları, görev kuyrukları, makro kaydı ve denetim günlüğü için kullanın. Bunu, Command geçmişini tutan bir çağırıcıyla birleştirin.
Sıkça Sorulan Sorular
“Command Kalıbı: Eylemleri Kapsülleme” dersi ücretsiz mi?
Evet — “Command Kalıbı: Eylemleri Kapsülleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Command Kalıbı: Eylemleri Kapsülleme” dersinde ne öğreneceğim?
Geri alma/yineleme ve makro kaydını desteklemek için istekleri Command nesneleri olarak sarın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Command Kalıbı: Eylemleri Kapsülleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Observer Kalıbı: Olay Bildirimi
- Strategy Kalıbı: Değiştirilebilir Algoritmalar
- Command Kalıbı: Eylemleri Kapsülleme
- Template Method: Algoritma İskeletlerini Tanımlama