文章插图
什么是命令模式?命令模式是一种行为型设计模式 , 它将请求或操作封装成独立的命令对象 。这些命令对象包括了执行操作所需的所有信息,例如操作方法、参数和接收者 。
命令模式允许您将命令发送者(客户端)和命令执行者(接收者)解耦,使得发送者无需知道接收者的具体类别 。在命令模式中,通常包含以下关键角色:
- 命令(Command):声明了执行操作的接口 , 通常包括一个
execute
方法 。 - 具体命令(Concrete Command):实现了命令接口,包含了实际的操作逻辑 。每个具体命令对象都与一个接收者相关联 。
- 接收者(Receiver):执行命令实际操作的对象 。
- 调用者(Invoker):负责调用命令对象来执行请求 。
- 客户端(Client):创建命令对象并设置其接收者,然后将命令对象传递给调用者 。
- 解耦:命令模式可以将发送者和接收者解耦,发送者无需知道接收者的具体实现 , 从而提高了系统的灵活性 。
- 可扩展性:您可以轻松地添加新的命令类 , 而无需修改已有的代码 。
- 撤销操作:命令对象通常会保存操作的状态,从而支持撤销操作 。
- 日志记录和事务管理:您可以使用命令模式来记录所有执行的命令,以便进行事务管理或撤销 。
Command
,它包括了一个 execute
方法: public interface Command {void execute();
}
接下来,我们创建具体的命令类,例如
TurnOnCommand
、ChangeChannelCommand
和 AdjustVolumeCommand
,它们实现了 Command
接口,并分别执行相应的操作 。 public class TurnOnCommand implements Command {private Television television;
public TurnOnCommand(Television television) {
this.television = television;
}
public void execute() {
television.turnOn();
}
}
// 类似地实现 ChangeChannelCommand 和 AdjustVolumeCommand
然后,我们创建接收者类
Television
, 它包含了实际的操作逻辑: public class Television {public void turnOn() {
System.out.println("电视已打开");
}
public void changeChannel() {
System.out.println("切换频道");
}
public void adjustVolume() {
System.out.println("调整音量");
}
}
最后,我们创建调用者类
RemoteControl
,它接收并执行命令: public class RemoteControl {private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
客户端代码如下: public class Client {
public static void mAIn(String[] args) {
Television television = new Television();
Command turnOnCommand = new TurnOnCommand(television);
Command changeChannelCommand = new ChangeChannelCommand(television);
Command adjustVolumeCommand = new AdjustVolumeCommand(television);
RemoteControl remoteControl = new RemoteControl();
remoteControl.setCommand(turnOnCommand);
remoteControl.pressButton();
remoteControl.setCommand(changeChannelCommand);
remoteControl.pressButton();
remoteControl.setCommand(adjustVolumeCommand);
remoteControl.pressButton();
}
}
这个示例中 , 我们将不同的操作(打开电视、切换频道、调整音量)封装成了命令对象 , 通过遥控器执行这些命令,而不需要直接调用接收者的方法 。宏命令宏命令是一种命令模式的扩展,它允许您将多个命令组合成一个更大的命令 。宏命令本身也是一个命令,可以执行一系列子命令 。这对于执行复杂的操作或者创建多级撤销机制非常有用 。让我们通过一个示例来了解宏命令 。假设我们有一个文本编辑器 , 需要实现一个宏命令来执行以下操作:
- 打开文件
- 编辑文件
- 保存文件
推荐阅读
- 怎么把电话加入黑名单,如何将手机联系人加入黑名单
- 杨颖被抛弃,豪宅遭卖售,将何去何从?
- 首播将至!30集大剧来了!我难掩激动,终于有像样的都市剧了
- QQ浏览器怎么开启无图模式,qq浏览器怎么开启无图模式
- Excel应该怎么才可以将只读模式取消
- 90后非流量花大突破!李沁、李一桐、白鹿领衔,谁将问鼎花旦宝座?
- cdr内描边怎么弄,cdr应该怎么才可以将文字进行描边
- CAD在只读模式下如何进行保存
- ai修改圆角矩形半径,Ai应该怎么才可以将圆角矩形调整为圆角
- 恭喜!TVB知名富二代结婚过大礼,将在光棍节举行婚礼