12.18

 

 

实验 20:备忘录模式

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

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

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

 

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

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

实验要求:

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;

}

}

 

 

}

3. 注意编程规范。

 

 

posted @ 2024-12-18 23:59  混沌武士丞  阅读(11)  评论(0)    收藏  举报