欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 命令模式-Command Pattern

命令模式-Command Pattern

2025/2/14 1:12:10 来源:https://blog.csdn.net/m0_58749949/article/details/145097551  浏览:    关键词:命令模式-Command Pattern

什么是命令模式

命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。

命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。

优点和应用场景

优点:

  • 解耦请求发送者和接受者,让系统更加灵活、可扩展
  • 由于每个操作都是一个独立的命令类,所以我们需要新增命令操作时,不需要改动现有代码。

命令模式典型的应用场景:

  • 系统需要统一处理多种复杂的操作,比如操作排队、记录操作历史、撤销重做等。
  • 系统需要持续增加新的命令、或者要处理复杂的组合命令(子命令),使用命令模式可以实现解耦

抽象命令

package test.pattern;public interface Command {void execute();
}

具体命令

package test.pattern;public class TurnOffCommand implements Command {private Device device;public TurnOffCommand(Device device) {this.device = device;}public void execute() {device.turnOff();}
}
package test.pattern;public class TurnOnCommand implements Command {private Device device;public TurnOnCommand(Device device) {this.device = device;}public void execute() {device.turnOn();}
}

接收者

package test.pattern;public class Device {private String name;public Device(String name) {this.name = name;}public void turnOn() {System.out.println(name + " 设备打开");}public void turnOff() {System.out.println(name + " 设备关闭");}
}

调用者

package test.pattern;public class RemoteControl {private Command command;public void setCommand(Command command) {this.command = command;}public void pressButton() {command.execute();}
}

测试

package test.pattern;public class Client {public static void main(String[] args) {// 创建接收者对象Device tv = new Device("TV");Device stereo = new Device("Stereo");// 创建具体命令对象,可以绑定不同设备TurnOnCommand turnOn = new TurnOnCommand(tv);TurnOffCommand turnOff = new TurnOffCommand(stereo);// 创建调用者RemoteControl remote = new RemoteControl();// 执行命令remote.setCommand(turnOn);remote.pressButton();remote.setCommand(turnOff);remote.pressButton();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com