12.8
实验16:命令模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解命令模式的动机,掌握该模式的结构;
2、能够利用命令模式解决实际问题。
[实验任务一]:多次撤销和重复的命令模式
某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。
实验要求:
1. 提交类图;
2. 提交源代码;
#include <iostream>
#include <string>
using namespace std;
class Manager
{
protected:
Manager *m_manager;
public:
Manager(Manager* manager):m_manager(manager){}
virtual void DealWithRequest(int num) {}
};
class zManager : public Manager
{
public:
zManager(Manager* manager):Manager(manager){}
void DealWithRequest(int num)
{
if(num < 10000)
{
cout << "主任批准物资采购" << num << "元" <<endl<<endl;
}
else
{
cout << "主任无法处理,交由部门经理处理" <<endl;
m_manager->DealWithRequest(num);
}
}
};
class CommonManager : public Manager
{
public:
CommonManager(Manager* manager):Manager(manager){}
void DealWithRequest(int num)
{
if(num < 50000)
{
cout << "部门经理批准物资采购" << num << "元" <<endl<<endl;
}
else
{
cout << "部门经理无法处理,交由副总经理处理" <<endl;
m_manager->DealWithRequest(num);
}
}
};
class Majordomo:public Manager
{
public:
Majordomo(Manager* manager):Manager(manager){}
virtual void DealWithRequest(int num)
{
if(num < 100000)
{
cout << "副总经理批准物资采购" << num << "元" <<endl<<endl;
}
else
{
cout << "副总经理无法处理,交由总经理处理" <<endl;
m_manager->DealWithRequest(num);
}
}
};
class GeneralManager : public Manager
{
public:
GeneralManager(Manager *manager):Manager(manager){}
void DealWithRequest(int num)
{
if(num < 200000)
{
cout << "总经理批准物资采购" << num << "元" <<endl<<endl;
}
else
{
cout << "总经理无法处理,需要开职工大会确定" <<endl;
}
}
};
main()
{
Manager *general = new GeneralManager(NULL);
Manager *majordomo = new Majordomo(general);
Manager *common = new CommonManager(majordomo);
Manager *z = new zManager(common);
z->DealWithRequest(4000);
z->DealWithRequest(10000);
z->DealWithRequest(60000);
z->DealWithRequest(110000);
z->DealWithRequest(400000);
}
3. 注意编程规范。
浙公网安备 33010602011771号