命令模式说:“将请求作为命令封装在一个对象下, 并将其传递给调用者对象。调用者对象寻找可以处理此命令的适当对象, 并将该命令传递给相应的对象, 然后该对象执行该命令”。
也称为动作或事务。
命令模式的优势
- 它将调用操作的对象与实际执行操作的对象分开。
- 由于现有的类保持不变, 因此添加新命令变得容易。
命令模式的用法:
它用于:
- 当你需要根据操作参数化对象时执行。
- 需要在不同时间创建和执行请求时。
- 需要支持回滚, 日志记录或事务处理功能时。
命令模式示例
让我们通过上面的UML图了解适配器设计模式的示例。
UML用于命令模式:
这些是“命令设计”模式的以下参与者:
- 命令这是用于执行操作的接口。
- ConcreteCommand此类扩展了Command接口并实现了execute方法。此类在操作和接收者之间创建绑定。
- 客户端此类创建ConcreteCommand类并将其与接收者相关联。
- 调用程序此类要求命令执行请求。
- Receiver此类知道要执行的操作。
以上UML的实现:
步骤1
创建一个ActionListernerCommand接口, 它将用作命令。
public interface ActionListenerCommand {
public void execute();
}
第2步
创建一个将用作接收器的Document类。
public class Document {
public void open(){
System.out.println("Document Opened");
}
public void save(){
System.out.println("Document Saved");
}
}
第三步
创建一个ActionOpen类, 它将用作ConcreteCommand。
public class ActionOpen implements ActionListenerCommand{
private Document doc;
public ActionOpen(Document doc) {
this.doc = doc;
}
@Override
public void execute() {
doc.open();
}
}
步骤4
创建一个ActionSave类, 它将用作ConcreteCommand。
public class ActionSave implements ActionListenerCommand{
private Document doc;
public ActionSave(Document doc) {
this.doc = doc;
}
@Override
public void execute() {
doc.save();
}
}
第5步
创建一个MenuOptions类, 它将作为一个调用者。
public class ActionSave implements ActionListenerCommand{
private Document doc;
public ActionSave(Document doc) {
this.doc = doc;
}
@Override
public void execute() {
doc.save();
}
}
第6步
创建将充当客户端的CommanPatternClient类。
public class CommandPatternClient {
public static void main(String[] args) {
Document doc = new Document();
ActionListenerCommand clickOpen = new ActionOpen(doc);
ActionListenerCommand clickSave = new ActionSave(doc);
MenuOptions menu = new MenuOptions(clickOpen, clickSave);
menu.clickOpen();
menu.clickSave();
}
}
输出量
Document Opened
Document Saved
评论前必须登录!
注册