Command design pattern Java example
Command design pattern Java example
Here's an example of the Command Design Pattern in Java:
Command Pattern Overview
The Command pattern is a behavioral design pattern that enables you to encapsulate a request or action as a separate object (the command) and execute it independently from its originator.
Java Example: Remote Control System
Let's say we're building a remote control system for controlling devices such as TV, lights, and air conditioners. We want to make sure the commands sent by each device are executed in a consistent manner, regardless of where they come from (e.g., button presses or voice assistants).
// Command interface
interface RemoteControlCommand {
void execute();
}
// Concrete command classes
class TurnOnTVCommand implements RemoteControlCommand {
private TV tv;
public TurnOnTVCommand(TV tv) {
this.tv = tv;
}
@Override
public void execute() {
tv.turnOn();
}
}
class IncreaseVolumeCommand implements RemoteControlCommand {
private TV tv;
public IncreaseVolumeCommand(TV tv) {
this.tv = tv;
}
@Override
public void execute() {
tv.increaseVolume();
}
}
// Receiver classes
class TV {
public void turnOn() {
System.out.println("TV turned on");
}
public void increaseVolume() {
System.out.println("TV volume increased");
}
}
class Light {
public void turnOn() {
System.out.println("Light turned on");
}
public void turnOff() {
System.out.println("Light turned off");
}
}
// Invoker class (Remote Control)
class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
public class Main {
public static void main(String[] args) {
TV tv = new TV();
Light light = new Light();
TurnOnTVCommand turnOnTvCmd = new TurnOnTVCommand(tv);
IncreaseVolumeCommand increaseVolCmd = new IncreaseVolumeCommand(tv);
TurnOffLightCommand turnOffLightCmd = new TurnOffLightCommand(light);
RemoteControl remote = new RemoteControl();
// Set the command for TV
remote.setCommand(turnOnTvCmd);
remote.pressButton(); // Output: TV turned on
// Set the command for TV volume
remote.setCommand(increaseVolCmd);
remote.pressButton(); // Output: TV volume increased
// Set the command for Light
remote.setCommand(turnOffLightCmd);
remote.pressButton(); // Output: Light turned off
}
}
How it Works
In this example:
We define an interfaceRemoteControlCommand
that represents a command that can be executed. We create concrete command classes (TurnOnTVCommand
, IncreaseVolumeCommand
, and TurnOffLightCommand
) that implement the RemoteControlCommand
interface. Each command class has its own specific behavior (e.g., turning on a TV, increasing the volume of a TV, or turning off a light). We define receiver classes (TV
and Light
) that are responsible for performing the actual actions (e.g., turning on/off a device). We create an invoker class (RemoteControl
) that sets and executes commands.
By using the Command pattern, we decouple the command sender (the button press) from the command receiver (the TV or light), which makes it easier to add new devices or modify existing ones without affecting the rest of the system.
How to use Java command prompt?
I'd be happy to help! However, I must correct you - there is no such thing as a "Java command prompt." The Java programming language is used for developing software, and it doesn't have its own built-in command-line interface or shell.
What you're probably thinking of is the Java Development Kit (JDK) that comes with the Java Runtime Environment (JRE). The JDK includes various tools for compiling, running, and debugging Java programs. One such tool is called javac
(short for "Java compiler"), which can be used from a command-line interface.
To use javac
from the command line, you'll need to:
cd
command. Use javac
to compile your Java program by typing the following command: javac YourProgram.java
This will generate a .class
file with the same name as your Java source file (e.g., YourProgram.class
). To run your Java program, use the java
command followed by the class name: java YourProgram
Here's an example of how this might work:
Suppose you have a Java program called HelloWorld.java
in a directory called C:JavaProjects
. You can compile it using the following command:
cd C:JavaProjects
javac HelloWorld.java
This will generate a file called HelloWorld.class
in the same directory. To run the program, you'd use the following command:
java HelloWorld
This would print "Hello, world!" to the console.
In addition to javac
, other useful tools that come with the JDK include:
javadoc
: generates HTML documentation for your Java programs. jar
: creates a JAR (Java Archive) file containing your compiled Java classes and any dependent libraries. jps
and jstack
: tools for monitoring and debugging Java processes.
I hope this helps! Let me know if you have any further questions.