Command Pattern: Actions को समाहित करना
undo/redo और macro recording का समर्थन करने के लिए requests को Command objects के रूप में wrap करें।
Command Pattern: Actions को समाहित करना, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Command का उद्देश्य
Command किसी अनुरोध को ऑब्जेक्ट के रूप में समाहित करता है, जिससे अलग-अलग अनुरोधों के साथ क्लाइंट का पैरामीटरकरण, कतारबद्ध करना, लॉग दर्ज करना और पूर्ववत की जा सकने वाली कार्रवाइयाँ संभव होती हैं।
Command interface
एक interface परिभाषित करें जिसमें execute() विधि और वैकल्पिक रूप से undo() विधि हो। प्रत्येक Command ऑब्जेक्ट एक कार्रवाई को करने और उसे उलटने का तरीका जानता है।
public interface Command {
void execute();
void undo();
}ठोस Command: TextEditor
प्रत्येक ठोस Command अपने प्राप्तकर्ता और कार्रवाई के पैरामीटरों को समाहित करता है। कार्रवाई करना उसे निष्पादित करता है; undo उसे उलट देता है।
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()); }
}आह्वायक: CommandHistory
आह्वायक निष्पादित किए गए Commands का इतिहास रखता है। यह execute() को कॉल करके उसे एक स्टैक पर push करता है। Undo करने पर वह pop करके 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();
}
}Undo / फिर से करने का स्टैक
फिर से करने के लिए एक स्टैक जोड़ें: Undo करते समय Command को फिर से करने वाले स्टैक पर push करें; फिर से करते समय उस स्टैक से pop करके दोबारा निष्पादित करें।
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
मैक्रो Command एक संयुक्त ऑब्जेक्ट है जो Commands की सूची रखता है और उन्हें क्रम से निष्पादित करता है। Undo विपरीत कार्रवाइयों को उलटे क्रम में निष्पादित करता है।
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(); }
}कार्य प्रसंस्करण के लिए Command कतार
Commands को एक कतार में रखें और उन्हें अतुल्यकालिक रूप से संसाधित करें। एक worker thread कतार से Commands निकालकर उन्हें निष्पादित करता है — इस तरह उत्पादक, निष्पादन thread से अलग हो जाते हैं।
BlockingQueue<Command> queue = new LinkedBlockingQueue<>();
// Producer:
queue.put(new SendEmailCommand(recipient, subject, body));
// Consumer thread:
Command cmd = queue.take();
cmd.execute();Executor के साथ Command
Commands को Runnable लैम्ब्डा के रूप में लपेटें और उन्हें ExecutorService में submit करें — लैम्ब्डा ही Command ऑब्जेक्ट है।
ExecutorService exec = Executors.newFixedThreadPool(4);
exec.submit(() -> sendEmail(recipient, subject));
exec.submit(() -> generateReport(params));ऑडिट के लिए Commands का लॉग दर्ज करना
क्रमबद्ध किए जा सकने वाले Command ऑब्जेक्ट को किसी लॉग में स्थायी रूप से सहेजा जा सकता है। पुनर्प्राप्ति के समय अंतिम स्थिति फिर से बनाने के लिए उन्हें दोबारा चलाएँ — यही Event Sourcing का आधार है।
void execute(Command cmd) {
cmd.execute();
auditLog.append(cmd.toString()); // log every action
history.push(cmd);
}GUI कार्रवाई बटन
GUI फ़्रेमवर्क में प्रत्येक बटन या मेनू आइटम में एक Command होता है। बटन पर क्लिक करने से command.execute() कॉल होता है। बटन के व्यवहार को बदलने के लिए रनटाइम पर Commands बदल दें।
Button saveBtn = new Button("Save");
saveBtn.setOnAction(() -> new SaveDocumentCommand(doc).execute());Command और रणनीति
दोनों व्यवहार को समाहित करते हैं। रणनीति ऐसी एल्गोरिदम को समाहित करती है जिसे रनटाइम पर बदला जा सकता है। Command एक पूरा अनुरोध समाहित करता है, जिसमें उसके पैरामीटर और प्राप्तकर्ता शामिल होते हैं, और यह इतिहास तथा कतारबद्ध करने की सुविधा देता है।
Spring में Command
Spring Batch का Tasklet और Spring Integration का MessageHandler अनुप्रयोग-स्तरीय Command पैटर्न हैं। प्रत्येक Tasklet किसी बैच कार्य के एक चरण को समाहित करता है।
त्वरित जाँच
Undo का समर्थन करने के लिए Command, execute() के अलावा कौन-सी अतिरिक्त विधि जोड़ता है?
पुनरावलोकन
Command कार्रवाइयों को ऑब्जेक्ट के रूप में समाहित करता है। इसका उपयोग Undo/फिर से करने वाले स्टैक, कार्य कतारों, मैक्रो रिकॉर्डिंग और ऑडिट का लॉग दर्ज करने के लिए करें। इसे ऐसे आह्वायक के साथ मिलाएँ जो Commands का इतिहास रखता हो।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Command Pattern: Actions को समाहित करना” पाठ निःशुल्क है?
हाँ—“Command Pattern: Actions को समाहित करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Command Pattern: Actions को समाहित करना” में मैं क्या सीखूँगा?
undo/redo और macro recording का समर्थन करने के लिए requests को Command objects के रूप में wrap करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Command Pattern: Actions को समाहित करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Observer Pattern: Event Notification
- Strategy Pattern: बदलने योग्य Algorithms
- Command Pattern: Actions को समाहित करना
- Template Method: Algorithm Skeletons परिभाषित करना