每日总结
软件设计模式 备忘录模式:
改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用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;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2020-11-15 每日总结47