每日总结

软件设计模式  命令模式:

 

 

 

 #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;
        }
    }


}

posted @   chenghaixinag  阅读(26)  评论(0编辑  收藏  举报
编辑推荐:
· .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-10-22 每日总结26
点击右上角即可分享
微信分享提示