读书人

下令模式(Command Pattern)

发布时间: 2012-10-11 10:16:10 作者: rapoo

命令模式(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();}}

??

读书人网 >软件架构设计

热点推荐