服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - JAVA教程 - 详解Java设计模式编程中命令模式的项目结构实现

详解Java设计模式编程中命令模式的项目结构实现

2020-04-20 14:44匆忙拥挤repeat JAVA教程

这篇文章主要介绍了Java设计模式编程中命令模式的项目结构实现,命令模式将请求与执行分离,可以多个命令接口的实现类,隐藏真实的被调用方,需要的朋友可以参考下

正论:

命令模式把一个请求或者操作封装到一个对象中。命令模式运行系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

通俗:

其实很好理解。命令模式,关心的就是命令(或者称为操作)。打个比方。在一个公司里面,整个运作就像一个系统。某个boss发布了一个命令,中层领导接到这个命令,然后指派给具体负责这个员工。整个流程很清晰吧。有一个需求,如何将这个流程固定下来,形成一个系统。我们只要抓住了重点:命令。将它抽取出来,其他的都迎刃而解了。抽取出命令,封装成一个独立的对象,实现了解耦。至于其他的,可以方便地扩展,不论这个命令是CEO,人事部,还是你爸提出来的。无论这个命令的执行者是张三还是王八。这个模式的产生,其实是哲学上的“抓住主要矛盾”。更多的例子,如其他作家举的“去路边吃烤肉和去烤肉店吃烤肉有什么不同”或者“美猴王大闹天宫中玉帝拍太白金星捉来猴子”。

Java命令模式本质是对命令的封装,从而把发出命令的责任和执行命令的责任分割开了,委派给不同的对象。通俗地说,我是老总,我只管发个命令,至于这个命令发给谁,谁执行,关我P事,我发钱请人不是为了给自己找麻烦。你是负责事情的员工,你的天职是做好上级交给你的任务,踏踏实实,不要知道太多,不要八卦,不要问太多了。

实现:
我们先来看一下类图:

详解Java设计模式编程中命令模式的项目结构实现

根据这个我们来看示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public interface ICommand {
  void execute();
}
 
public class ConcreteCommand implements ICommand {
  private Receiver receiver;
 
  public ConcreteCommand(Receiver receiver) {
    this.receiver = receiver;
  }
 
  @Override
  public void execute() {
    this.receiver.action();
  }
 
}
 
public class Receiver {
  public void action() {
    System.out.println("receiver do something");
  }
}
 
public class Invoker {
  private ICommand command;
   
  public Invoker(ICommand command) {
    this.command = command;
  }
   
  public void invoke() {
    this.command.execute();
  }
}
 
public class Test {
  public static void main(String[] args) {
    Receiver receiver = new Receiver();//真正的执行者
    ICommand command = new ConcreteCommand(receiver);//用于的隔离的命令
    Invoker invoker = new Invoker(command );//调用者
    invoker.invoke();
  }
}


优点:

  • 很容易构造一个命令队列
  • 记录相关的命令日志
  • 增加命令的状态,实现命令的撤销和重做
  • 允许接受请求的一方决定是否可做
  • 新的命令轻而易举可以加入其中

缺点:
可能会有过多的具体命令类存在。

延伸 · 阅读

精彩推荐