个性化阅读
专注于IT技术分析

命令模式

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

也称为动作或事务。


命令模式的优势

  • 它将调用操作的对象与实际执行操作的对象分开。
  • 由于现有的类保持不变, 因此添加新命令变得容易。

命令模式的用法:

它用于:

  • 当你需要根据操作参数化对象时执行。
  • 需要在不同时间创建和执行请求时。
  • 需要支持回滚, 日志记录或事务处理功能时。

命令模式示例

让我们通过上面的UML图了解适配器设计模式的示例。

UML用于命令模式:

这些是“命令设计”模式的以下参与者:
  • 命令这是用于执行操作的接口。
  • ConcreteCommand此类扩展了Command接口并实现了execute方法。此类在操作和接收者之间创建绑定。
  • 客户端此类创建ConcreteCommand类并将其与接收者相关联。
  • 调用程序此类要求命令执行请求。
  • Receiver此类知道要执行的操作。
命令模式UML

以上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
赞(0)
未经允许不得转载:srcmini » 命令模式

评论 抢沙发

评论前必须登录!