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

下令模式(Command Pattern)

2012-10-11 
命令模式(Command Pattern)命令模式本质是对命令的封装,从而把发出命令的责任和执行命令的责任分割开了,委

命令模式(Command Pattern)

命令模式本质是对命令的封装,从而把发出命令的责任和执行命令的责任分割开了,委派给不同的对象。

?

将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

?

Command模式的几个要点:
????? 1、Command模式的根本目的在于将“行为请求者”与“行为实现者”解耦,在面向对象语言中,常见的实现手段是“将行为抽象为对象”。
????? 2、实现Command接口的具体命令对象ConcreteCommand 有时候根据需要可能会保存一些额外的状态信息。
????? 3、通过使用Composite模式,可以将多个“命名”封装为一个“复合命令”MacroCommand。

?

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

????? 6、支持宏命令

?

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


下令模式(Command Pattern)
?
命令接口:

public interface Command {public void execute();}

?

命令实现类:

/** * 不同的命令对应到不同的接收者 */public class ConcreteCommand implements Command{private Receiver receiver;public ConcreteCommand(Receiver receiver){this.receiver = receiver;}public void execute() {receiver.action();}}

?

接收者:

public class Receiver {public void action(){System.out.println("接收者处理请求!");}}

?

调用者:

/** * 可以调用任何命令 */public class Invoke {private Command command;public Invoke(Command command){this.command = command;}public void doAction(){command.execute();}}

?

测试代码:

/** * 命令和接收者可以根据需要灵活调整 */public class Test {public static void main(String[] args) {Receiver receiver = new Receiver();ConcreteCommand command = new ConcreteCommand(receiver);Invoke invoke = new Invoke(command);invoke.doAction();}}

??

热点排行