命令模式可用于实现事务行为
(和撤消
)。
但我在谷歌搜索中无法找到这些的示例。我只能找到一些关于开启
或关闭
灯的微不足道的示例。
在哪里可以找到使用命令模式
实现这些行为的编码示例(最好是用Java
)?
命令模式可用于实现事务行为
(和撤消
)。
但我在谷歌搜索中无法找到这些的示例。我只能找到一些关于开启
或关闭
灯的微不足道的示例。
在哪里可以找到使用命令模式
实现这些行为的编码示例(最好是用Java
)?
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"));
addTask
方法,将工作项添加到等待完成任务的内部任务队列中。...队列中的项目是命令对象。通常这些对象实现了一个通用接口,如java.lang.Runnable
,使得线程池可以执行命令,即使线程池类本身没有任何关于它将被用于哪些具体任务的知识。” - obatakuExecutorService
结合使用Runnable
之外,还使用了Callable
。类似的例子可以在关于维基百科文章本身的讨论中看到这里。 - obatakuRunnable
接口的类都可以满足命令模式。例如:class ExitTask implements Runnable { public void run() { System.exit(0); } }
- obataku你必须在Command接口中定义undo()、redo()操作,以及execute()
。
例如:
interface ChangeI {
enum State{ READY, DONE, UNDONE, STUCK } ;
State getState() ;
void execute() ;
void undo() ;
void redo() ;
}
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() ;} ;
}
看一下这个撤销-重做命令的文章,以便更好地理解。
Runnable
或Callable
的地方。 - jaco0646