场景引入
这样一个场景:我们要吃饭,那么在家的情况下就需要我们要自己去做饭,然后才能吃到饭。但是如果我们现在在餐厅的话,我们只需要点菜就可以吃到饭。在家做饭的过程就相当于餐厅厨师做法的过程,属于执行。那么在家做法就相当于自己给自己下命令,然后自己去执行命令的过程。就是你自己告诉你自己:我要吃小龙虾,然后你自己去做小龙虾;我要吃面条,然后你要自己去做面条。但是你在餐厅就不一样,你只要说:我要吃小龙虾,你只要告诉老板,你就能吃到小龙虾;你要吃面条,你告诉老板,你也能吃到。这就相当于把请求和执行的过程进行了分开。命令模式就是这样,你只要告诉接收者你的命令,那么你只需要发出命令,而不用自己去执行命令。因为如果每一个命令都需要自己去实现的话,那么自己的类就变得十分复杂。就像现在每个人都在家吃饭,那么每个人都要实现自己做饭的需求。但是想象以下:如果在餐厅吃饭和在家吃饭的成本一样,那么肯定是餐厅吃饭来的更好,因为你只要发出命令,而不需要自己去执行那个过程就能实现。
代码实现
Customer
public class Customer {
Command command;
public Customer(Command command) {
this.command = command;
}
public void setCommand(Command command) {
this.command = command;
}
public void call(){
System.out.println("我是顾客,我要发出命令,然后我就能得到我需要的东西了:兴奋ing");
command.exec();
}
}
Command
public interface Command {
public void exec();
}
Crayfish
public class Crayfish implements Command{
@Override
public void exec() {
System.out.println("我是做小龙虾的厨师,又有人点,我又得做小龙虾");
}
}
Noodle
public class Noodle implements Command{
@Override
public void exec() {
System.out.println("我是面条厨师,又有人点,我又得做面条");
}
}
Test
public class Test {
public static void main(String[] args) {
Customer you = new Customer(new Noodle());
you.call();
}
}