第六十七节 Java设计模式 - 命令模式

Java设计模式 - 命令模式

命令模式是数据驱动设计模式它是行为模式之一。

请求被作为命令的对象包装传递给invoker对象。

Invoker对象将命令传递到相应的对象并且该对象执行该命令。

例子

复制代码
import java.util.ArrayList;
import java.util.List;

interface Command {
  void execute();
}

class MouseCursor {
  private int x = 10;
  private int y = 10;
  public void move() {
    System.out.println("Old Position:"+x +":"+y);
    x++;
    y++;
    System.out.println("New Position:"+x +":"+y);
    
  }

  public void reset() {
    System.out.println("reset");
    x = 10;
    y = 10;
  }
}

class MoveCursor implements Command {
  private MouseCursor abcStock;

  public MoveCursor(MouseCursor abcStock) {
    this.abcStock = abcStock;
  }

  public void execute() {
    abcStock.move();
  }
}

class ResetCursor implements Command {
  private MouseCursor abcStock;

  public ResetCursor(MouseCursor abcStock) {
    this.abcStock = abcStock;
  }

  public void execute() {
    abcStock.reset();
  }
}

class MouseCommands {
  private List<Command> orderList = new ArrayList<Command>();

  public void takeOrder(Command order) {
    orderList.add(order);
  }

  public void placeOrders() {
    for (Command order : orderList) {
      order.execute();
    }
    orderList.clear();
  }
}

public class Main {
  public static void main(String[] args) {
    MouseCursor cursor = new MouseCursor();

    MoveCursor moveCursor = new MoveCursor(cursor);
    ResetCursor resetCursor = new ResetCursor(cursor);

    MouseCommands commands= new MouseCommands();
    commands.takeOrder(moveCursor);
    commands.takeOrder(resetCursor);

    commands.placeOrders();
  }
}

上面的代码生成以下结果。

相关推荐
wenbin_java3 分钟前
设计模式之备忘录模式:对象状态的可逆时光机
java·设计模式·备忘录模式
fengwuJ10 分钟前
Idea忽略已提交文件
java·ide·git·intellij-idea·ignore
漫步企鹅14 分钟前
【GDB】调试程序的基本命令和用法(Qt程序为例)
开发语言·qt·gdb·调试
阿昆的科研日常23 分钟前
Matlab个性化绘图第10期—滑珠进度柱状图
开发语言·matlab·可视化·论文插图
斑驳的岁月24 分钟前
MacOs java环境配置+maven环境配置踩坑实录
java·macos·maven
严文文-Chris27 分钟前
方法区、堆、虚拟机栈、寄存器分别存储哪些内容?为什么存储这些内容?
java·开发语言
bing_15831 分钟前
JVM 常用字节码指令有哪些?
jvm·jvm 常用字节码指令
qq_4850152135 分钟前
Java网络编程干货
java·网络·php
无名之逆37 分钟前
Hyperlane 文件分块上传服务端
服务器·开发语言·前端·网络·http·rust·php
努力的搬砖人.43 分钟前
java爬虫案例
java·经验分享·后端