命令模式-java

package u16;

//抽象命令类    
public abstract class AbstractCommand {    
  public abstract int execute(int value); //声明命令执行方法execute()    
  public abstract int undo(); //声明撤销方法undo()    
}    
复制代码
package u16;

//具体命令类    
class ConcreteCommand extends AbstractCommand {    
  private Adder adder = new Adder();    
  private int value;  
  //实现抽象命令类中声明的execute()方法,调用加法类的加法操作    
  public int execute(int value) {    
          this.value=value;    
          return adder.add(value);    
      }    
          
      //实现抽象命令类中声明的undo()方法,通过加一个相反数来实现加法的逆向操作    
      public int undo() {    
          return adder.add(-value);    
      }    
  }    
复制代码
复制代码
package u16;

public class Client {    
    public static void main(String args[]) {    
        CalculatorForm form = new CalculatorForm();    
        AbstractCommand command;    
        command = new ConcreteCommand();    
        form.setCommand(command); //向发送者注入命令对象    
            
        form.compute(15);
        form.compute(14);
        form.compute(5);
        form.undo();  
        form.undo();
        form.undo();
    }    
}    
复制代码
复制代码
package u16;

public class CalculatorForm {    
    private AbstractCommand command;    
        
    public void setCommand(AbstractCommand command) {    
        this.command = command;    
    }    
        
    //调用命令对象的execute()方法执行运算    
    public void compute(int value) {    
        int i = command.execute(value);    
        System.out.println("执行运算,运算结果为:" + i);    
    }    
        
    //调用命令对象的undo()方法执行撤销    
    public void undo() {    
        int i = command.undo();    
        System.out.println("执行撤销,运算结果为:" + i);    
    }    
}  
复制代码
复制代码
package u16;

//加法类:请求接收者    
public class Adder {    
  private int num=0; //定义初始值为0    
      
  //加法操作,每次将传入的值与num作加法运算,再将结果返回    
  public int add(int value) {    
      num += value;    
      return num;    
  }    
}    
复制代码

 

 

posted @   yasai  阅读(41)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
历史上的今天:
2020-10-27 2020年10月27日
点击右上角即可分享
微信分享提示