您的位置:首页 > 财经 > 金融 > 梧州论坛看点_广东最新疫情通告_微信公众号怎么推广_搜索app下载

梧州论坛看点_广东最新疫情通告_微信公众号怎么推广_搜索app下载

2025/1/5 15:38:56 来源:https://blog.csdn.net/m0_61891910/article/details/144891068  浏览:    关键词:梧州论坛看点_广东最新疫情通告_微信公众号怎么推广_搜索app下载
梧州论坛看点_广东最新疫情通告_微信公众号怎么推广_搜索app下载

行为型模式

  1. 模板方法模式(Template Method Pattern)
  2. 命令模式(Command Pattern)
  3. 迭代器模式(Iterator Pattern)
  4. 观察者模式(Observer Pattern)
  5. 中介者模式(Mediator Pattern)
  6. 备忘录模式(Memento Pattern)
  7. 解释器模式(Interpreter Pattern)
  8. 状态模式(State Pattern)
  9. 策略模式(Strategy Pattern)
  10. 职责链模式(Chain of Responsibility Pattern)
  11. 访问者模式(Visitor Pattern)

命令模式(Command Pattern) 是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求、队列或日志来参数化其他对象。命令模式让你能够将请求发送者与请求接收者解耦,发送者只关心发送命令,而不需要知道如何处理它们。命令模式非常适合用于需要将多个操作组合成一个单一操作、撤销操作等场景。

主要角色
  1. Command(命令接口):声明了执行操作的接口。
  2. ConcreteCommand(具体命令):实现了命令接口,并定义了与接收者的绑定关系。具体命令对象将请求传递给接收者。
  3. Receiver(接收者):知道如何实施与请求相关的操作。具体的操作由接收者完成。
  4. Invoker(调用者):负责调用命令对象执行请求。
  5. Client(客户端):创建命令对象并设置其接收者。
  6. Invoker(调用者):请求命令的执行。

+-----------+        +-------------------+        +------------+
|   Client  |------->|    Invoker         |------->|   Command  |
+-----------+        +-------------------+        +------------+
                        |                          |
                        v                          v
                  +-------------+           +-------------------+
                  | Receiver    |           | ConcreteCommand   |
                  +-------------+           +-------------------+
 

工作原理
  • 命令:创建一个命令对象,将请求转发到接收者对象。
  • 调用者:调用命令对象的 execute() 方法来触发命令的执行。
  • 接收者:接收请求并执行相关操作。

命令模式的优点

  • 解耦请求者与执行者:发送请求的对象(调用者)不需要知道请求是如何被执行的,只需要知道如何调用命令接口。
  • 灵活性高:可以将多个请求组合成一个命令,命令也可以进行撤销、重做等操作。
  • 扩展性好:增加新命令时,只需要扩展新的命令类,无需修改现有的代码,符合开闭原则。

Java 示例代码

假设我们有一个遥控器(Invoker),可以控制开关家里的灯(Receiver),而每个按钮的动作就是一个命令(Command)。

// Command接口:所有具体命令的共同接口
public interface Command {void execute();void undo();
}// Receiver:接收命令并执行相关操作
public class Light {public void turnOn() {System.out.println("Light is ON");}public void turnOff() {System.out.println("Light is OFF");}
}// ConcreteCommand:开灯命令
public class LightOnCommand implements Command {private Light light;  // 接收者public LightOnCommand(Light light) {this.light = light;}@Overridepublic void execute() {light.turnOn();  // 执行接收者的动作}@Overridepublic void undo() {light.turnOff();  // 撤销操作}
}// ConcreteCommand:关灯命令
public class LightOffCommand implements Command {private Light light;public LightOffCommand(Light light) {this.light = light;}@Overridepublic void execute() {light.turnOff();  // 执行接收者的动作}@Overridepublic void undo() {light.turnOn();  // 撤销操作}
}// Invoker:遥控器,调用命令
public class RemoteControl {private Command command;// 设置命令public void setCommand(Command command) {this.command = command;}// 执行命令public void pressButton() {command.execute();}// 撤销命令public void pressUndo() {command.undo();}
}public class CommandPatternDemo {public static void main(String[] args) {// 创建接收者Light light = new Light();// 创建具体命令Command lightOn = new LightOnCommand(light);Command lightOff = new LightOffCommand(light);// 创建遥控器(调用者)RemoteControl remote = new RemoteControl();// 使用遥控器控制开关灯remote.setCommand(lightOn);remote.pressButton();  // 输出:Light is ONremote.setCommand(lightOff);remote.pressButton();  // 输出:Light is OFF// 撤销操作remote.pressUndo();  // 输出:Light is ON}
}

版权声明:

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

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