实际中遇到的command模式
?
??????
?
?????
command 模式 就是 client去 调用invoker,invoker去调用command,command去调用receiver,然后receiver在client显示。
我在RCP项目中,要实现一个命令,并且有它的undo,redo功能。
比如我在一个数据操作类里,写上
public void editFormalParam(Client tab, Parameter pParam) { EditParamCommand cmd = new EditParamCommand(model); ........................................ final EditParamCommand pCmd = cmd; SafeAction safeAction = new SafeAction(BuildingblockeditorPluginResources.SACFACTION.toString()) { public void runSafe() { getCommandStack().execute(pCmd); } }; safeAction.run(); }
这时候client要执行editFormalParam方法, 就会去执行 command里的execute方法。
这个数据操作类就是一个invoker,它去执行command里的execute方法。
我们同时在command类里实现了
public class EditParamCommand { private Model model; private Object new; private Object old; public EditorParamCommand(Model model,Object new,Object old){ this.model=model; this.new=new; this.old=old; } public void execute(){ model.get...; mode.set...; } public void redo(){ model.set(new); } public void undo(){ model.set(old); }}
这里的model就是receiver.
然后把model变化后的数据返回client,刷新。
?