设计模式之Command
应该用设计模式的眼观来看设计模式,不然一定会让你失望的。在开发中会遇到一方去调用另一方,甲具有决定权,知道什么时候该行动。而乙虽然不知道什么时候行动,但是他很清楚怎么做。
好了,现在看起来这个代码写起来非常清楚,甲去调用乙中的方法就可以了。但是不能用静态的眼观来看程序,尤其是这种调用关系中。如果哪一天甲抛弃了乙该投丙了(当然丙也是知道该怎么做但是不知道该什么时候做),这下麻烦来了。需要把甲中与乙有关的部分用丙的替换掉,当然这是简单调用的情况,那如果甲和乙之间的关系千丝万缕的时候怎么办呢?重写甲吧。
但是,如果你的程序使用了命令模式就大不一样了。甲只需要傻傻地调用execte就可以了(当然甲可能是经过严密的推理之后发现时机到了),而乙和丙则负责execte完美的运行就好啦。就像是乙告诉甲,你想运行的时候就调用execte就可以啦,运行细节你不用管。
代码修改时候的复杂性来源于各个不同角色之间的各种纠缠在一起的关系,而用命令模式就可以成功把调用者和执行者解耦。下面是段示例(丑了点):
interface Command{
void execute();
}
class myCommand implements Command{
public void execute() {
System.out.println("myCommand has done sth.");
}
}
class invoker{
Command command;
public void setCommand(Command command){
this.command = command;
}
public void iShouldDoSth(){
command.execute();
}
}
public class Test {
public static void main(String[] arg){
invoker a = new invoker();
a.setCommand(new myCommand());
a.iShouldDoSth();
}
}
----------------------------------
欢迎拍砖。