首页 > 其他分享 >11-20

11-20

时间:2023-11-20 10:23:36浏览次数:41  
标签:11 20 form int undo unStack redo public

某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。

 

 

package Lab16;

import java.util.Stack;

 

public abstract class AbstractCommand {

    public abstract int execute(int value);

    public abstract int undo();

    public abstract int redo();

}

 

public class AddCommand extends AbstractCommand {

      private Adder adder = new Adder();

      private Stack<Integer> unStack = new Stack<Integer>();// 返回栈,用来记录所做的每一步操作,用于撤回

      private Stack<Integer> reStack = new Stack<Integer>();// 重复栈,用来存储返回栈弹出的数据,由于重复

     /**

             * 撤回

             *

       */

     public int undo() {

         int i=0;

         if (unStack.isEmpty()) {

             

             i=-1;

         }else{

             Integer pop = unStack.pop();

             reStack.push(pop);

             if(!unStack.isEmpty()){//判断弹出数据后是否为空,如果为空,说明已撤回到最原始状态

                 i=unStack.peek();

             }

         }

         return i;

     }

 

     /**

      * 恢复

      */

     public int redo() {

         int i=0;

         if (reStack.isEmpty()) {

             i=-1;

         }else{//撤回时只要可以可以撤回,则返回栈一定有数据

             Integer pop = reStack.pop();

             unStack.push(pop);

             i=pop;

         }

         return i;

     }

 

     /**

      * 执行计算,并进行栈的更新

      */

     public int execute(int value) {

         int v = 0;

         if (unStack.isEmpty()) {// 说明还没有数据

             v = adder.add(value);

             unStack.push(v);

         } else {// 需要更新两个栈中的内容,并计算结果,其中返回栈应该更新,重复栈应该清空

             v = adder.add(value);

             unStack.push(v);

             if (!reStack.isEmpty()) {

                 for (int i = 0; i < reStack.size(); i++) {

                     reStack.pop();

                 }

             }

         }

         return v;

     }

 }

 

public class Adder {

     private int num =0;

     public int add(int value) {

        num+=value;

        return num;

     }

}

 

public class CalculatorForm {

          private AbstractCommand command;

          public void setCommand(AbstractCommand command) {

              this.command =command;

          }

          /**

               * 执行运算

           * @param value

           */

         public void compute(int value) {

             command.execute(value);

         }

         /**

              * 撤回

          */

         public void undo() {

             int i = command.undo();

             if(i==-1){

                 System.out.println("缓存中已不存在数据");

             }else{

                 System.out.println("执行成功,运算结果是:"+i);

             }

         }

         /**

          * 恢复

          */

         public void redo() {

              int i = command.redo();

             if(i==-1){

                 System.out.println("已恢复至最新数据");

             }

             else{

                 System.out.println("执行成功,运算结果是:"+i);

             }

         }

     }

 

public class Client {

    public static void main(String[] args) {

        CalculatorForm form = new CalculatorForm();

        AddCommand command = new AddCommand();

        form.setCommand(command);

        //计算

        System.out.println("------计算过程------");

        form.compute(1);

        form.compute(2);

        form.compute(3);

        form.compute(4);

        //多次撤回

        System.out.println("------撤回过程------");

        form.undo();

        form.undo();

        form.undo();

        form.undo();

        form.undo();

        //多次恢复

        System.out.println("------恢复过程------");

        form.redo();

        form.redo();

        form.redo();

        form.redo();

        form.redo();    

    }

}

标签:11,20,form,int,undo,unStack,redo,public
From: https://www.cnblogs.com/YFLZ/p/17843356.html

相关文章

  • 上周热点回顾(11.13-11.19)
    热点随笔:· 30岁之前透支,30岁之后还债。 (程序员济癫)· .NET8正式发布 (张善友)· 阿里云崩了,总结我们从云上搬到线下经历了什么 (iNeuOS工业互联网系统)· 最后的一次努力:尝试解决百度收录与排名问题 (博客园团队)· .NET8.0AOT经验分享FreeSql/FreeRedis/FreeSch......
  • 【2023-11-14】连岳摘抄
    23:59喝香槟、开跑车是愉悦的生活,但不是美好的生活,美好的生活是每一天都用你的优势去创造真实的幸福和丰富的满足感,这是在生活的每一个层面上——工作、爱情、教养孩子等,都可以学着做到的。                           ......
  • win10和win11关闭自动更新
    (1)win+r运行输入:regedit(2)在注册表编辑左侧栏依次展开以下目录:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings(3)在窗口右侧空白处创建新建一个:DWORD(32位)值(4)将其重命名为:FlightSettingsMaxPauseDays(5)在双击打开,基数改为十进制,数值数字改成你想暂停的天数:例......
  • 11
    #--coding:utf-8--importtorchimporttorchvisionfromthopimportprofile#Modelprint('==>Buildingmodel..')model=torchvision.models.alexnet(pretrained=False)dummy_input=torch.randn(1,3,224,224)flops,params=profile(model,(dumm......
  • 2023年confluence安装
    声明感谢zhile与cptactionhank两位大佬,一切功劳归与两位大佬。文中内容仅用于个人测试尝鲜,从未用于多人使用场景。读者如需商业使用请向Atlassian官方购买正版,一切商用侵权行为等导致的后果,归咎于直接使用者,与两位大佬以及PrimaryHacker无关。部署所需文件jdk1.8.0、MySQL5......
  • 11.15 监控目录文件变化
    监视对指定目录的更改,并将有关更改的信息打印到控制台,该功能的实现不仅可以在内核层,在应用层同样可以。程序中使用ReadDirectoryChangesW函数来监视目录中的更改,并使用FILE_NOTIFY_INFORMATION结构来获取有关更改的信息。ReadDirectoryChangesW是Windows操作系统提供的一个函数,......
  • 每周总结11.01
    安装并学习了基础的vuebuild项目构建(webpack)相关代码config 配置目录,包括端口号等。我们初学可以使用默认的。node_modules npm加载的项目依赖模块assets:放置一些图片,如logo等。components:目录里面放了一个组件文件,可以不用。App.vue:项目入口文件,我们也可以直接将组件......
  • 11.20每日总结
    今天早上进行了软件设计模式的实验16实验16:命令模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解命令模式的动机,掌握该模式的结构;2、能够利用命令模式解决实际问题。 [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈......
  • win11笔记本换内存后,报错,及解决:0x00007FF8011F6693指令引用了0x0000000000000000内存
    笔记本原装内存为一对镁光8GDDR54800MHz换单条镁光32GDDR55600MHz内存后,重启电脑出现如下报错:0x00007FF8011F6693指令引用了0x0000000000000000内存。该内存不能为read。要终止程序,请单击”确定” 联系内存的卖家客服提供的解决步骤虽然我没看到滚屏,但是重启后问题一样......
  • 11月20每日打卡
    [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。实验要求:1. 搜集并掌握JAVA和C++中常见的数据结构......