每日总结

软件设计模式   备忘录模式:

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

 

#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 @ 2021-11-15 19:50  chenghaixinag  阅读(56)  评论(0编辑  收藏  举报