設計模式——18命令模式(Command)

inzaghi1984發表於2017-12-11

18、命令模式(Command)
命令模式很好理解,舉個例子,司令員下令讓士兵去幹件事情,從整個事情的角度來考慮,司令員的作用是,發出口令,口令經過傳遞,傳到了士兵耳朵裡,士兵去執行。這個過程好在,三者相互解耦,任何一方都不用去依賴其他人,只需要做好自己的事兒就行,司令員要的是結果,不會去關注到底士兵是怎麼實現的。

Invoker是呼叫者(司令員),Receiver是被呼叫者(士兵),MyCommand是命令,實現了Command介面,持有接收物件,看實現程式碼:
[java] view plaincopy

  1. public interface Command {
  2. public void exe();
  3. }
    [java] view plaincopy
  4. public class MyCommand implements Command {
  5. private Receiver receiver;
  6. public MyCommand(Receiver receiver) {
  7. this.receiver = receiver;
  8. }
  9. @Override
  10. public void exe() {
  11. receiver.action();
  12. }
  13. }
    [java] view plaincopy
  14. public class Receiver {
  15. public void action(){
  16. System.out.println(“command received!”);
  17. }
  18. }
    [java] view plaincopy
  19. public class Invoker {
  20. private Command command;
  21. public Invoker(Command command) {
  22. this.command = command;
  23. }
  24. public void action(){
  25. command.exe();
  26. }
  27. }
    [java] view plaincopy
  28. public class Test {
  29. public static void main(String[] args) {
  30. Receiver receiver = new Receiver();
  31. Command cmd = new MyCommand(receiver);
  32. Invoker invoker = new Invoker(cmd);
  33. invoker.action();
  34. }
  35. }
    輸出:command received!

這個很哈理解,命令模式的目的就是達到命令的發出者和執行者之間解耦,實現請求和執行分開,熟悉Struts的同學應該知道,Struts其實就是一種將請求和呈現分離的技術,其中必然涉及命令模式的思想!


相關文章