场景: 命令模式是很常用的,一般就是说,你可能会执行一些操作, 这些操作都实现一个接口,但是有不同的命令实现,然后命令的执行类就是同一个,你需要执行哪个命令就封装那个命令后发送给执行类即可

1.命令模式

  1. package com.example.demo.pattern.command;
  2. /**
  3. * @author chenchao
  4. * @date 2021/11/9
  5. */
  6. public class CommandPatternDemo {
  7. public static void main(String[] args) {
  8. Command commandA = new CommandA();
  9. Command commandB = new CommandB();
  10. Invoker invoker = new Invoker();
  11. invoker.setCommand(commandA);
  12. invoker.execute();
  13. invoker.setCommand(commandB);
  14. invoker.execute();
  15. // 我给大家举个例子
  16. // 有两种请求要发送过来执行
  17. // 一种请求是读请求,一种请求是写请求,不同请求要执行的功能逻辑是不一样的
  18. // 此时就非常适合用这个命令模式
  19. // 将读请求的功能逻辑封装到ReadCommand里面去,将写请求的功能逻辑封装到WriteCommand里面去
  20. // 然后设置一个通用的一个命令执行的类
  21. // 读请求来了,就封装ReadCommand,交给同一个命令执行类来执行即可
  22. // 写请求来了,就封装WriteCommand,交给同一个命令感知性类来执行即可
  23. // 所以为什么要用这种模式呢?
  24. // 其实很多时候,用模式,是采用模式的合理的思想,去良好的设计你的代码
  25. // 你运用了模式之后,就可以很好的表达你的代码组件是干嘛的
  26. // 调用一个工具类的某个方法,太恶心了,从面相对象设计的角度,你没有任何面向对象的设计,你就是一个面向过程
  27. // 面向方法在执行这个功能
  28. // 如果你的面向对象的设计太烂的话,几乎没有设计,到了1年以后,你的系统的代码很难看懂,几乎没人能看懂
  29. // 但是反过来说,按照设计模式体现出的优秀的面向对象设计的思想,来规划你的代码的设计,可能几年以后,
  30. // 别人过来,不通命令,代表了不同的逻辑,代码就很好理解,可读性,维护性,扩展性
  31. // 构造器模式,builder,工厂模式
  32. }
  33. public interface Command {
  34. void execute();
  35. }
  36. public static class CommandA implements Command {
  37. @Override
  38. public void execute() {
  39. System.out.println("命令A的功能逻辑");
  40. }
  41. }
  42. public static class CommandB implements Command {
  43. @Override
  44. public void execute() {
  45. System.out.println("命令B的功能逻辑");
  46. }
  47. }
  48. public static class Invoker {
  49. private Command command;
  50. public Command getCommand() {
  51. return command;
  52. }
  53. public void setCommand(Command command) {
  54. this.command = command;
  55. }
  56. public void execute() {
  57. System.out.println("一些别的逻辑A");
  58. command.execute();
  59. System.out.println("一些别的逻辑B");
  60. }
  61. }
  62. }

2.说明

其实命令模式非常适合跟工厂方法模式结合起来使用,就是使用多个工厂来制造出不同的命令类来,将命令的构造放在工厂方法中