首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

java设计形式之命令者模式

2012-11-23 
java设计模式之命令者模式JAVA设计模式之命令者模式在程序设计中,经常设计到一个对象需要请求另外一个对象

java设计模式之命令者模式
JAVA设计模式之命令者模式


在程序设计中,经常设计到一个对象需要请求另外一个对象调用其方法达到某种目的,如果请求这不希望或不直接和被请求者打交道,既请求者不包含被请求者的引用,那么就可以使用命令模式。例如在军队中,指挥官请求三连偷袭敌人,但是指挥官不希望或无法直接与三连取得联系,那么可以将该请求形成一个命令,该命令的核心是让三连偷袭敌人。只要能让该命令被执行,就会实现偷袭敌人的目的。

命令模式是关于怎样处理一个对象请求到另一个对象调用其方法完成某项任务的一种成熟的模式,这里称提出请求的对象为请求者,被请求的对象为接收者。在命令模式中,当一个对象请求另一个对象其调用方法时,不和被请求的对象直接打交道,而是把这这种请求封装到一个命令的对象中,起封装的手段是将请求封装在命令对象的一个方法中。命令模式的核心就是使用命令对象来封装方法调用。既请求者的请求,接受者调用方法。


结构:
命令者模式包括四种角色
接收者:接受者是一个类的实例,该实例负责执行与请求相关的操作
命令:命令是一个接口,规定了用来封装请求的若干个方法。
具体命令:具体命令是实现命令接口的类的实例,具体命令必须实现命令接口中的方法。

请求者:请求者是一个包含”命令接口“变量的类的实例。请求者中的”命令“接口的变量可以存放任何具体命令的引用,请求者负责调用具体命令,让具体命令执行那些封装了请求的方法



代码实例:
接受者

package org.zhy.commandmacro;import java.util.ArrayList;public class Appliction {public static void main(String[] args) {ArrayList<Command> commandList = new ArrayList<Command>();RequestPerson person = new RequestPerson();Command englishCommand = new PrintEnglishCommand(new PrintLetter());Command numberCommand = new PrintNumberCommand(new PrintNumber(10));commandList.add(englishCommand);commandList.add(numberCommand);Command macroCommand = new MacroCommand(commandList);person.setCommand(macroCommand);person.startExecuteCommand();}}

命令者模式的优点
1、在命令者模式中,请求者不直接与接受者互交,既请求者不包含接受者的引用,因此彻底消除了彼此之间的耦合。
2、命令者模式满足了软件的“开-闭原则”。如果增加新的具体命令和该命令的接受者,不必修改调用者的代码,调用者就可以直接使用新的命令对象。反之如果增加新的调用者,不必修改现有的具体命令和接受者。新增加的调用者就可以使用已有的具体命令
3、由于请求者的请求被封装到了具体命令中,那么就可以将具体命令保存到持久化媒介中,在需要的时候重新执行这个具体命令。因此使用命令者模式可以记录日志
4、使用命令者模式可以对请求者的请求进行排队,每个请求者各自对应一个具体命令,因此可以按一定的顺序执行这些命令。
适用命令者模式的场景
1、程序需要在不同的时刻指定,排列和执行请求
2、程序需要提供撤销操作
3、程序需要支持宏操作




热点排行