首页 > 其他分享 >11.20每日总结

11.20每日总结

时间:2023-11-20 09:34:31浏览次数:100  
标签:总结 form int 每日 11.20 undo unStack redo public

今天早上进行了软件设计模式的实验16

实验16:命令模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解命令模式的动机,掌握该模式的结构;

2、能够利用命令模式解决实际问题。

 

[实验任务一]:多次撤销和重复的命令模式

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

实验要求:

1. 提交类图;

2. 提交源代码;

3. 注意编程规范。

 

 

package test;
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();
}
}

  

 

标签:总结,form,int,每日,11.20,undo,unStack,redo,public
From: https://www.cnblogs.com/louwangshayu/p/17843214.html

相关文章

  • 11月20每日打卡
    [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。实验要求:1. 搜集并掌握JAVA和C++中常见的数据结构......
  • 每日总结-23.11.18
    publicclassStudent{privateStringid;privateStringname;privateStringage;publicStringgetAge(){returnage;}publicvoidsetAge(Stringage){this.age=age;}publicStudent(){}publicStude......
  • 每日总结-23.11.19
    importjava.util.Stack;publicabstractclassAbstractCommand{publicabstractintexecute(intvalue);publicabstractintundo();publicabstractintredo();}publicclassAddCommandextendsAbstractCommand{privateAdderadder=newA......
  • 每日总结-23.11.20
    publicclassMemory{privatestaticMemoryinstance=newMemory();publicstaticMemorygetInstance(){returninstance;}publicbooleancheck(booleanoperIf){System.out.println("内存开始自检");if(ope......
  • 20231109学习总结
    MySQL重新初始化1.需要将mysql数据目录下的数据全部清空rm-rf/data/mysql/data 2.初始化数据库/usr/local/mysql/bin/mysqld   --initialize--user=mysql--basedir=/usr/local/mysql--datadir=/data/mysql/data/ 3.重新启动数据库 /etc/init.d/mysqldst......
  • 20231120学习总结.
    信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。Java:publicinterfaceAggregate{publicvoidadd(Objectobj);publicvoidremove(Ob......
  • 11.20软件设计实验二
    实验18:迭代器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解迭代器模式的动机,掌握该模式的结构;2、能够利用迭代器模式解决实际问题。 [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA......
  • 11.20实验18
    实验18:迭代器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解迭代器模式的动机,掌握该模式的结构;2、能够利用迭代器模式解决实际问题。[实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代......
  • 2023-2024-1 20231413 《计算机基础与程序设计》第八周学习总结
    2023-2024-120231413《计算机基础与程序设计》第八周学习总结1.作业信息班级:2023-2024-1-计算机基础与程序设计作业要求:2023-2024-1《计算机基础与程序设计》教学进程目标:自学教材:计算机科学概论第9章并完成云班课测试《C语言程序设计》第7章并完成云班课测试作业正文:h......
  • BLOG总结
    前言:    在过去的三个星期里,我接触了许多新的知识和技能。从编程思想到软件包的使用,涉及了诸如set、map、stream、DoubleLinkedList、lambda表达式、正则表达式等内容,这些是我之前接触较少但非常精密的知识。同时,我还学习了银行类的设计、农夫过河实验以及期中考试(主要考......