命令模式

【命令模式】命令模式说:“将请求作为命令封装在一个对象下, 并将其传递给调用者对象。调用者对象寻找可以处理此命令的适当对象, 并将该命令传递给相应的对象, 然后该对象执行该命令”。
也称为动作或事务。
命令模式的优势

  • 它将调用操作的对象与实际执行操作的对象分开。
  • 由于现有的类保持不变, 因此添加新命令变得容易。
命令模式的用法: 它用于:
  • 当你需要根据操作参数化对象时执行。
  • 需要在不同时间创建和执行请求时。
  • 需要支持回滚, 日志记录或事务处理功能时。
命令模式示例
让我们通过上面的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

    推荐阅读