首页 > 其他分享 >Tutorial 20_备忘录模式

Tutorial 20_备忘录模式

时间:2023-11-23 23:23:07浏览次数:30  
标签:20 cout int list value 备忘录 command public Tutorial

实验 20:备忘录模式

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

1、理解备忘录模式的动机,掌握该模式的结构;

2、能够利用备忘录模式解决实际问题。


[实验任务一]:多次撤销

改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。

实验要求:

1. 提交源代码;

2. 注意编程规范。

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;
class AbstractCommand {
    public:
    virtual int execute(int value) = 0;
    virtual int undo() = 0;
};
class Adder {
    public:
    int num = 0;
    int add(int value) { num += value; return num; };
};
class ConcreteCommand :public AbstractCommand {
public:
        Adder* adder = new Adder();
        vector<int>* list;
        ConcreteCommand() { this->list = new vector<int>; };
        int execute(int value) {
        list->push_back(value);
        return adder->add(value);
        };
        int undo() {
        if (list->size() > 0) {
        int value = list->at(list->size() - 1);
        list->pop_back();
        return adder->add(-value);
        }
        else {
        return 0;
        }
        };
        };
class CalculatorForm {
    public:
    AbstractCommand* command;
    void setCommand(AbstractCommand* command) {
        this->command = command;
    };
    void compute(int value) {
        int i = command->execute(value);
        cout << "执行运算,运算结果为:" << i << endl;
    }
    void undo() {
        int i = command->undo();
        cout << "执行撤销,运算结果为:" << i << endl;
    }
};
int main() {
        CalculatorForm* form = new CalculatorForm();
        ConcreteCommand* command = new ConcreteCommand();
        form->setCommand(command);
        bool flag = true;
        while (flag) {

        cout << "请输入想要操作的选项,1为计算,-1为撤销,0为退出" << endl;
        int n;
        cin >> n;
        switch (n) {
        case 1:
        cout << "请输入想要添加的数值" << endl;
        int m;
        cin >> m;
        form->compute(m);
        break;
        case -1:
        form->undo();
        break;
        case 0:
        flag = false;
        break;
default:
        cout << "输入错误请重新输入!!\n";
        break;
        }
        }

 

 

标签:20,cout,int,list,value,备忘录,command,public,Tutorial
From: https://www.cnblogs.com/JJTyyds/p/17852751.html

相关文章

  • 2023.11.20-2023.11.26 周记
    11.20星期一升旗仪式时间改到上午大课间了,前一节还正好是体育,之前太冷现在太热,真服了。与其说升旗仪式,到不如说是颁奖仪式。七年级年级前十:李泊璇、陈墨杋、黄耀民、周敬轩、牛文昊、张轩豪、秦子祺、时欣翔、徐颢扬、宋之萱。八年级年级前十:何家鼎、李承恩、朱鑫、陈亦飞、张......
  • 2023-11-23
    packagecn.alan.wms;importcn.alan.wms.async.Async;importcn.alan.wms.bean.User;importcn.alan.wms.listener.OnCompleteListener;importcn.alan.wms.tools.OperateSql;importcn.alan.wms.tools.Logger;importjava.util.ArrayList;importjava.util.List;......
  • 20231122
    2023/11/231798C-CandyStore只能说gcd,lcm的题目还是练少了,一些性质都不知道。对于一段可以用同一个标签的区间,我们知道他们的c是一样的,c=di*bi,每一个物品的bi固定,那么c就一定是lcm{bi..bn},因为c要能整除任何一个bi。然后我们来看可以自己决定的di,ai%di==0.而每一个物品的di=......
  • 20231123
    2023/11/231798C-CandyStore只能说gcd,lcm的题目还是练少了,一些性质都不知道。对于一段可以用同一个标签的区间,我们知道他们的c是一样的,c=di*bi,每一个物品的bi固定,那么c就一定是lcm{bi..bn},因为c要能整除任何一个bi。然后我们来看可以自己决定的di,ai%di==0.而每一个物品的di=......
  • 2023-2024 20232319《网络空间安全导论》第2周学习总结
    思维导图教材学习过程中的问题和解决过程问题一:sm2算法和sm4算法是对称算法还是非对称算法?答案:sm2属于非对称算法,sm4属于对称算法。问题一解决方案:询问chatgpt。问题二:区块链技术与密码学的关系答案:区块链技术与密码学有着密切的关系,密码学是区块链技术的基础之一。以下是......
  • 2023.11.23——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.JavaGUI2.会话跟踪技术明日计划:学习......
  • 2023-2024-1 20232421邓锴 《网络空间安全导论》 第2周学习总结
    教材学习总结了解密码的来源与发展ENIGMA机的构造以及机理信息论的基本观点了解现代密码学发展以及面临的挑战密码学理论基础(数学知识)密码学的新进展以及未来方向思维导图教材学习中的问题和解决问题问题1:ENIGMA机的构造以及机理了解不清问题1解决办法:查询图片→查找......
  • 20231123
    好久都没写过OI相关的东西了,累了。真的累了。刚刚lf给我说他明天会给我整一个容斥的单元小测。有点紧张,因为自己数学一直都很烂。还有容斥这么抽象的玩意,到时候估计会脑抽。累了。不能放弃啊。继续吧。今天和@Super_Cube吃饭的时候聊到了「关于力老师为什么只同意......
  • 20232303 关于OpenSSL的学习
    关于OpenSSL的学习sm2加密解密请忽略原来遗留下的文件,它们与本任务无关,只看新生成的文件就好。问题与解答-opensslecparam-nameSM2-genkey-outsm2-key.pem这是一个使用OpenSSL工具生成SM2密钥的命令。opensslecparam是OpenSSL的椭圆曲线操作命令。-name......
  • 2023-2024-1 20231329《计算机基础与程序设计》第9周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09这个作业的目标计算机科学概论第10,11章并完成云班课测试《C语言程序设计》第8章并完成云班课测试......