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. 注意编程规范。

 

 

posted @ 2024-12-08 23:42  混沌武士丞  阅读(8)  评论(0)    收藏  举报