您的位置:首页 > 其它

设计模式入门之命令模式Command

2014-05-01 19:51 417 查看
//命令模式定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化
//对请求排队或者记录请求日志,以及支持可撤销的操作
//模式结构
//命令接口
public interface Command {
public void execute();
}
//具体的命令,需要封装与之对应的执行者Receiver
public class ConcreteCommand implements Command {
private Receiver receiver = null;
private Stirng state;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
public void execute() {
receiver.action();
}
}
//命令接受者即执行者
public class Receiver {
public void action() {
//真正执行命令操作的代码
}
}
//调用者,需要封装他所具备的命令
public class Invoker {
private Command command = null;
public void setCommand(Command command) {
this.command = command;
}
public void runCommand() {
command.execute();
}
}
//客户端
public class Client {
public static void main(String args[]) {
Receiver receiver = new Receiver();
Command command = new Command(receiver);
Invoker invoker = new Invoker();
invoker.setCommand(command);
invoker.runCommand();
}
}
//实例:主机开机的例子
//定义主板
public interface MainBoardApi {
public void open();
}
//某个主板类,相当与模式中的接受者,真正执行命令
public class GigaMainBoard implements MainBoardApi {
public void open() {
System.out.println("开机");
}
}
//命令接口
public interface Command {
public void execute();
}
//开机命令
public class OpenCommand implements Command {
private MainBoardApi mainBoard = null;
public OpenCommand(MainBoard mainBoard) {
this.mainBoard = mainBoard;
}
public void execute() {
this.mainBoard.open();
}
}
//机箱,包括了命令对象
public class Box {
private Command openCommand;
public void setOpenCommand(Command command) {
this.openCommand = command;
}
public void openButtonPressed() {
openCommand.execute();
}
}
//客户端,客户使用开机按钮
public class Client {
public static void main(String args[]) {
MainBoardApi mainBoard = new GigaMainBoard();
Command openCommand = new OpenCommand(mainBoard);
Box box = new Box();
box.setCommand(openCommand);
box.openButtonPressed();
}
}
//命令模式优点
//更松散的耦合
//命令模式使得命令的发起者-客户端,与命令的执行者-接受者对象完全耦合
//发起者完全不知道执行者是谁,也不知道如何实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息