【命令模式】命令模式说:“将请求作为命令封装在一个对象下, 并将其传递给调用者对象。调用者对象寻找可以处理此命令的适当对象, 并将该命令传递给相应的对象, 然后该对象执行该命令”。
也称为动作或事务。
命令模式的优势
- 它将调用操作的对象与实际执行操作的对象分开。
- 由于现有的类保持不变, 因此添加新命令变得容易。
- 当你需要根据操作参数化对象时执行。
- 需要在不同时间创建和执行请求时。
- 需要支持回滚, 日志记录或事务处理功能时。
让我们通过上面的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
推荐阅读
- 复合设计模式
- 责任链模式
- 建造者设计模式
- 桥接模式
- 行为设计模式
- 适配器模式
- 什么是.DAT文件以及如何在Windows 10中打开DAT文件()
- Android和iOS设备的12大最佳写作应用软件合集推荐
- Windows 10如何从PDF文件中提取图像(有哪些方法?)