第六十七节 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();
  }
}

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

相关推荐
我真的是大笨蛋8 小时前
K8S-Pod(下)
java·笔记·云原生·容器·kubernetes
碳水加碳水8 小时前
Java代码审计实战:XML外部实体注入(XXE)深度解析
java·安全·web安全·代码审计
TechNomad9 小时前
设计模式:状态模式(State Pattern)
设计模式·状态模式
努力也学不会java9 小时前
【设计模式】 原型模式
java·设计模式·原型模式
方渐鸿10 小时前
【2024】k8s集群 图文详细 部署安装使用(两万字)
java·运维·容器·kubernetes·k8s·运维开发·持续部署
学亮编程手记10 小时前
K8S v1.33 版本主要新特性介绍
java·容器·kubernetes
Haven-11 小时前
Java-面试八股文-JVM篇
java·jvm·面试
我真的是大笨蛋11 小时前
JVM调优总结
java·jvm·数据库·redis·缓存·性能优化·系统架构
wjs04011 小时前
Git常用的命令
java·git·gitlab
superlls11 小时前
(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
java·数据结构·算法