命令模式的应用的现实世界的例子(Real world example of application

2019-07-31 05:03发布

Command模式可以被用来实现Transactional behavior (和Undo )。
但我无法通过在google找到这些例子。 我只能发现是灯的一些琐碎的例子switched onoff
我在哪里可以找到一个编码例(最好在Java这个问题)/这些行为使用实施Command Pattern

Answer 1:

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

  1. 创建数据库的记录。
  2. 呼叫服务,以更新相关记录。
  3. 调用另一个服务登录票。

以事务性方式执行此,每个操作被实现为与撤消操作的命令。 在每一步结束时,该命令被压入堆栈。 如果操作在一些步骤失败,那么我们从栈中弹出的命令,并呼吁每个命令的撤销操作弹出。 在该命令执行被定义每个步骤的撤消操作扭转较早command.execute()。

希望这可以帮助。



Answer 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"));


Answer 3:

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

  1. 当然,你到处看到的是GUI实现,交换机的一个很简单的例子。 它也可用于广泛的游戏开发。 有了这个模式,用户可以配置自己的屏幕上的按钮以及。
  2. 它是在网络中使用为好,如果一个命令将被传递到另一端。
  3. 当程序员想要存储用户执行的所有命令,例如,有时一个游戏让您重播的整体水平。
  4. 它是用来实现回调。

这里是提供如实施例用于回调命令图案的位点。 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


Answer 4:

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类。 根据当前状态后execute ()方法时,你必须决定是否应添加命令Undo StackRedo Stack ,并采取相应的决定。

abstract class AbstractChange implements ChangeI {
    State state = State.READY ;

    public State getState() { return state ; }

    public void execute() {
        assert state == State.READY ;
        try { doHook() ; state = State.DONE ; }
        catch( Failure e ) { state = State.STUCK ; }
        catch( Throwable e ) { assert false ; }
    }

    public void undo() { 
        assert state == State.DONE ; }
        try { undoHook() ; state = State.UNDONE ; }
        catch( Failure e ) { state = State.STUCK ; }
        catch( Throwable e ) { assert false ; }
    }

    public void redo() {
        assert state == State.UNDONE ;
        try { redoHook() ; state = State.DONE ; }
        catch( Failure e ) { state = State.STUCK ; }
        catch( Throwable e ) { assert false ; }
    }

    protected abstract void doHook() throws Failure ; 

    protected abstract void undoHook() throws Failure ; 

    protected void redoHook() throws Failure { doHook() ;} ; 
}

看看这个撤消,重做为了更好的理解命令的文章。



文章来源: Real world example of application of the command pattern