首页 > 其他分享 >11.28

11.28

时间:2024-11-25 09:03:04浏览次数:8  
标签:11.28 int value command adder public result

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

  1. 提交类图;

  2. 提交源代码;


// AbstractCommand.java
package command;

public abstract class AbstractCommand {
    public abstract int execute(int value);
    public abstract int undo();
    public abstract int redo();
}

// Adder.java
package command;

public class Adder {
    private int num = 0;
    
    public int add(int value) {
        num += value;
        return num;
    }
}

// AddCommand.java
package command;

import java.util.Stack;

public class AddCommand extends AbstractCommand {
    private Adder adder;
    private Stack<Integer> unStack;
    private Stack<Integer> reStack;
    
    public AddCommand(Adder adder) {
        this.adder = adder;
        this.unStack = new Stack<>();
        this.reStack = new Stack<>();
    }
    
    @Override
    public int execute(int value) {
        int result = adder.add(value);
        unStack.push(value);
        reStack.clear(); // 执行新命令时清空重做栈
        return result;
    }
    
    @Override
    public int undo() {
        if (unStack.isEmpty()) {
            return 0; // 没有可撤销的操作
        }
        
        int value = unStack.pop();
        reStack.push(value);
        return adder.add(-value); // 撤销就是执行相反的操作
    }
    
    @Override
    public int redo() {
        if (reStack.isEmpty()) {
            return 0; // 没有可重做的操作
        }
        
        int value = reStack.pop();
        unStack.push(value);
        return adder.add(value);
    }
}

// CalculatorForm.java
package command;

public class CalculatorForm {
    private AbstractCommand command;
    
    public CalculatorForm(AbstractCommand command) {
        this.command = command;
    }
    
    public void compute(int value) {
        int result = command.execute(value);
        System.out.println("计算结果: " + result);
    }
    
    public void undo() {
        int result = command.undo();
        System.out.println("撤销后结果: " + result);
    }
    
    public void redo() {
        int result = command.redo();
        System.out.println("重做后结果: " + result);
    }
}

// Main.java
package command;

public class Main {
    public static void main(String[] args) {
        // 创建接收者
        Adder adder = new Adder();
        
        // 创建命令
        AddCommand addCommand = new AddCommand(adder);
        
        // 创建调用者
        CalculatorForm calculator = new CalculatorForm(addCommand);
        
        // 测试计算、撤销和重做功能
        calculator.compute(5);    // 加5
        calculator.compute(3);    // 加3
        calculator.compute(2);    // 加2
        
        calculator.undo();        // 撤销加2
        calculator.undo();        // 撤销加3
        
        calculator.redo();        // 重做加3
        calculator.compute(4);    // 加4
    }
}

  1. 注意编程规范。

标签:11.28,int,value,command,adder,public,result
From: https://www.cnblogs.com/wlxdaydayup/p/18566837

相关文章

  • 2024.11.24~2024.11.28
    2024.11.24开心的周末(可能是写博客的时候比较开心吧,嘻嘻)上午刷了一套cf,在3h30min刷完了下午去打了一会乒乓球,回来时发现shr已经讲了10分钟的课了(尴尬.png)这周将扫描线,虽然说这个机房除了我以外还有不会的吗?(呃),但是起码没像讲平衡树那样一个字也听不懂的的程度了发现扫描线也没......
  • 大二打卡(11.28)
    今天做了什么:上午的数据结构课程如往常一样,老师认真地讲解着各种数据结构的原理和应用。我认真地记着笔记,试图将每一个知识点都牢牢地印在脑海中。这样的课程虽然有些枯燥,但却是我专业基础的重要组成部分,不容忽视。马原课是我们这一学期的最后一次给领导看监控的课。这意味着我......
  • 11.28
    <%@pageimport="java.sql.*"%><%@pageimport="java.sql.DriverManager"%><%@pageimport="java.lang.reflect.Parameter"%><%--CreatedbyIntelliJIDEA.User:qq316TochangethistemplateuseFile|S......
  • 11.28
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>员工页面</title><style>.form{width:600px;margin:0auto;/*border......
  • 11.28
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>教师功能页面</title></head>......
  • 11.28(读后感5)
    在阅读《程序员修炼之道》第六章后,我深感受益匪浅。这一章主要讲述了如何提高编程技能和效率,以及如何在团队中发挥更大的作用。以下是我从这一章中学到的一些重要观点和感悟:持续学习:作为一名程序员,我们需要不断地学习新的技术和知识,以适应不断变化的技术环境。这包括阅读书籍、参......
  • 11.28
    今天实现职员的功能。staff.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>员工页面</title><style>.form{width:600px;margin:0aut......
  • 聪明办法学Python_task4_11.28-12.2
    聪明办法学Python_task4_11.28-12.2聪明办法学Python_task4_11.28-12.21.task06循环1.1while循环1.2for循环1.3循环控制语句1.4range()函数2.task07字符串2.1字符串构成2.2字符串操作2.2.1字符串运算2.2.2索引&切片2.2.3相关函数1.task06......
  • 聪明办法学Python_task3_11.27-11.28
    聪明办法学Python_task3_11.27-11.28聪明办法学Python_task3_11.27-11.281.task05条件1.1if-else语句1.2if-else推导式1.3match-case语句2.talk01代码风格1.task05条件1.1if-else语句分为if、if-else、if-elif-elseif条件1:语句1elif条件2:......
  • 2023.11.28 随笔 了却君
    无聊。又来犯点无病呻吟之病。今日语文考时,绞尽脑汁,未背出下阙三、四段。特此默之,温习。《破阵子·为陈同甫赋壮词以寄之》辛弃疾醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声。沙场秋点兵。马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发......