当前位置: 首页 > 图灵资讯 > 技术篇> Java设计模式之命令模式

Java设计模式之命令模式

来源:图灵教育
时间:2021-12-28 09:57:42

  commands模式是将请求封装为一个对象,以使客户可以使用不同的请求参数化;对请求进行排队或记录日志,并支持可撤销操作,将“发出请求的对象”和“接收到它们的对象”分开。以下笔者很详细地和大家谈论Java设计模式命令模式

命令模式,Java设计模式。

  其目标是达到命令发出者与执行者之间的解耦,实现请求与执行的分离,而Struts熟悉Struts的同学们应该知道,Struts实际上是分离请求和渲染的技术,其中必然包含了命令模式的思想!

  目的:将一个请求封装到一个对象中,这样,您就能够以不同的请求参数化客户。

  重点解决:在软件系统中,行为请求者和行为实现者之间通常是一个紧密耦合的关系,但是在某些情况下,例如行为需要被记录.撤销或重做.交易等处理时,这种不能抵抗变化的紧密耦合设计是不太合适的。

  什么时候用:在某些情况下,例如“记下.撤销/重做.交易”之类的处理,而这种不能抵抗变化的紧密耦合是不合适的。这样的话,怎样才能使“行为请求者”和“行为实现者”分离?通过把行为集合抽象成对象,实现了两者的松耦合。

  处理方法:调用方调用接收方执行命令,顺序:呼叫方→接收方→命令。

  编码:定义三种角色:

  真正的命令执行对象是1.received。

  2.Command。

  3.invoker使用了command对象的入口。

  Application:struts1中的action核心控制器ActionServlet只有一个,它与Invoker相等,模型层的类在不同的应用中具有不同的模型类,相当于特定Command。

  优点:

  1.降低系统耦合度。

  2.可以很容易地将新命令加入系统。

  缺点:

  在某些系统中,使用命令模式会使特定的命令类增加。

  利用方案:在认为为命令的地方,可使用命令模式,例如:

  1.GUI中的每个按钮都是命令。

  2.仿真CMD。

  注:系统需要对命令的撤消(Undo)操作和恢复(Redo)操作进行支持,还可以考虑使用命令模式,见命令模式扩展。

  总而言之,命令方式很好理解,指挥长命令士兵干一件事,从整体上来看,司令的角色是:发口令,传口令,传到士兵耳里,由兵来执行。这一过程很好,三者彼此解耦,任何一方都不必依赖他人,只要做好自己的事情,所要做的是结果,不会去关心士兵到底是如何实现的。

  JavaDesignschema的所有命令模式,都已经被同学们所掌握了?