真实世界的命令模式应用示例

时间:2012-08-28 06:16:41

标签: java oop design-patterns transactions command-pattern

Command pattern可用于实施Transactional behavior(和Undo) 但我通过谷歌搜索找不到这些例子。我只能找到一些switched onoff灯的简单例子 我在哪里可以找到使用Java实现的/这些行为的编码示例(最好在Command Pattern中)?

4 个答案:

答案 0 :(得分:13)

在我们的一个项目中,我们有以下要求:

  1. 在数据库中创建记录。
  2. 致电服务以更新相关记录。
  3. 调用其他服务以记录故障单。
  4. 要以事务方式执行此操作,每个操作都实现为具有撤消操作的命令。在每个步骤结束时,命令被压入堆栈。如果操作在某个步骤失败,那么我们从堆栈弹出命令并在弹出的每个命令上调用undo操作。每个步骤的撤消操作都在该命令实现中定义,以反转先前的command.execute()。

    希望这有帮助。

答案 1 :(得分:2)

public final class Ping implements Callable<Boolean> {

  private final InetAddress peer;

  public Ping(final InetAddress peer) {
    this.peer = peer;
  }

  public Boolean call() {
    /* do the ping */
    ...
  }
}
...
final Future<Boolean> result
    = executorService.submit(new Ping(InetAddress.getByName("google.com")));
System.out.println("google.com is " + (result.get() ? "UP" : "DOWN"));

答案 2 :(得分:2)

命令模式在很多地方使用。

  1. 当然,你到处看到的是一个非常简单的GUI实现示例,交换机。它也被广泛用于游戏开发。使用此模式,用户也可以在屏幕上配置他的按钮。
  2. 如果必须将命令传递到另一端,它也在网络中使用。
  3. 当程序员想要存储用户执行的所有命令时,例如有时候游戏会让你重播整个关卡。
  4. 用于实现回调。
  5. 这是一个站点,它提供了用于回调的命令模式的示例。 http://www.javaworld.com/article/2077569/core-java/java-tip-68--learn-how-to-implement-the-command-pattern-in-java.html?page=2

    1. 这是另一个显示数据库命令模式的链接。代码在C#中。 http://www.codeproject.com/Articles/154606/Command-Pattern-at-Work-in-a-Database-Application

答案 3 :(得分:0)

You have to define undo(), redo() operations along with execute() in Command interface itself

示例:

interface ChangeI {
    enum State{ READY, DONE, UNDONE, STUCK } ;
    State getState() ;

    void execute() ;    
    void undo() ;    
    void redo() ;
}

ConcreteCommand课程中定义一个州。根据{{​​1}}()方法之后的当前状态,您必须决定是否应将命令添加到executeUndo Stack并相应地做出决定。

Redo Stack

请查看此undo-redo命令文章,以便更好地理解。