每日总结
软件设计模式 备忘录模式:
改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。
#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;
}
}
}