说说设计模式~命令模式(command)

打印 上一主题 下一主题

主题 851|帖子 851|积分 2553

回到目录
概述

命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而允许我们根据不同的请求将客户端参数化,并且能够将请求排队或记录请求日志、支持撤销操作等。该模式使得请求的发送者和接收者解耦。
使用命令模式的主要目的是将方法调用封装成对象,这样可以在不同的上下文中使用不同的请求、队列或日志来参数化其他对象。这使得请求的发送者和接收者之间的耦合度降低,并且能够灵活地扩展和变化请求的处理。
包含的对象

命令模式的主要参与者包括:

  • Command(命令):声明执行操作的接口,通常包含执行方法 execute()。
  • ConcreteCommand(具体命令):实现 Command 接口,将一个接收者对象绑定于一个动作,并实现执行方法。
  • Receiver(接收者):执行命令的相关操作,是具体业务逻辑的实际执行者。
  • Invoker(调用者):发出具体命令并要求命令执行请求的对象。
  • Client(客户端):创建具体命令对象并设置其接收者。
在代码中的体现

以下是一个使用命令模式的简单示例,以控制电灯的开关操作为例:

  • 定义命令接口和具体命令类:
  1. // Command(命令)
  2. public interface Command {
  3.     void execute();
  4. }
  5. // ConcreteCommand(具体命令)
  6. public class LightOnCommand implements Command {
  7.     private Light light;
  8.     public LightOnCommand(Light light) {
  9.         this.light = light;
  10.     }
  11.     @Override
  12.     public void execute() {
  13.         light.turnOn();
  14.     }
  15. }
复制代码

  • 定义接收者类:
  1. // Receiver(接收者)
  2. public class Light {
  3.     public void turnOn() {
  4.         System.out.println("Light turned on");
  5.     }
  6.     public void turnOff() {
  7.         System.out.println("Light turned off");
  8.     }
  9. }
复制代码

  • 定义调用者类:
  1. // Invoker(调用者)
  2. public class RemoteControl {
  3.     private Command command;
  4.     public void setCommand(Command command) {
  5.         this.command = command;
  6.     }
  7.     public void pressButton() {
  8.         command.execute();
  9.     }
  10. }
复制代码

  • 客户端代码示例:
  1. // Client(客户端)
  2. public class Main {
  3.     public static void main(String[] args) {
  4.         // 创建接收者对象
  5.         Light light = new Light();
  6.         // 创建具体命令对象并设置接收者
  7.         Command lightOnCommand = new LightOnCommand(light);
  8.         // 创建调用者对象并设置命令
  9.         RemoteControl remoteControl = new RemoteControl();
  10.         remoteControl.setCommand(lightOnCommand);
  11.         // 执行命令
  12.         remoteControl.pressButton();
  13.     }
  14. }
复制代码
在上述示例中,命令模式的主要参与者包括 Command 接口和 LightOnCommand 具体命令类。Light
类作为接收者执行实际的命令操作。RemoteControl 类作为调用者负责接收命令并执行。客户端代码创建接收者对象、具体命令对象和调用者对象,并将它们组合在一起进行命令的执行。
通过命令模式,我们可以将控制电灯开关的操作封装成一个命令对象,使得命令的发送者和接收者解耦,且能够动态地设置命令并执行。这样的设计可以方便地扩展和修改命令的处理逻辑,以及支持命令的撤销和重做操作等。
回到目录

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表