用C++行为模式详细表示老板来了 员工工作 司机擦车 前台服务顾客 老板走了 员工炒股 前台化妆
时间: 2024-02-18 07:01:41 浏览: 19
这里给出一个基于命令模式的实现,具体代码如下:
```cpp
#include <iostream>
#include <vector>
// 抽象命令类
class Command {
public:
virtual void execute() = 0;
};
// 接收者类
class Employee {
public:
void doWork() {
std::cout << "员工工作" << std::endl;
}
void doStock() {
std::cout << "员工炒股" << std::endl;
}
};
class Driver {
public:
void doClean() {
std::cout << "司机擦车" << std::endl;
}
};
class FrontDesk {
public:
void doService() {
std::cout << "前台服务顾客" << std::endl;
}
void doMakeup() {
std::cout << "前台化妆" << std::endl;
}
};
// 具体命令类
class WorkCommand : public Command {
public:
WorkCommand(Employee* employee) {
m_employee = employee;
}
virtual void execute() {
m_employee->doWork();
}
private:
Employee* m_employee;
};
class StockCommand : public Command {
public:
StockCommand(Employee* employee) {
m_employee = employee;
}
virtual void execute() {
m_employee->doStock();
}
private:
Employee* m_employee;
};
class CleanCommand : public Command {
public:
CleanCommand(Driver* driver) {
m_driver = driver;
}
virtual void execute() {
m_driver->doClean();
}
private:
Driver* m_driver;
};
class ServiceCommand : public Command {
public:
ServiceCommand(FrontDesk* frontDesk) {
m_frontDesk = frontDesk;
}
virtual void execute() {
m_frontDesk->doService();
}
private:
FrontDesk* m_frontDesk;
};
class MakeupCommand : public Command {
public:
MakeupCommand(FrontDesk* frontDesk) {
m_frontDesk = frontDesk;
}
virtual void execute() {
m_frontDesk->doMakeup();
}
private:
FrontDesk* m_frontDesk;
};
// 请求者类
class Boss {
public:
void come() {
m_commandList.push_back(new WorkCommand(&m_employee));
m_commandList.push_back(new CleanCommand(&m_driver));
m_commandList.push_back(new ServiceCommand(&m_frontDesk));
for (auto command : m_commandList) {
command->execute();
}
m_commandList.clear();
}
void go() {
m_commandList.push_back(new StockCommand(&m_employee));
m_commandList.push_back(new MakeupCommand(&m_frontDesk));
for (auto command : m_commandList) {
command->execute();
}
m_commandList.clear();
}
private:
Employee m_employee;
Driver m_driver;
FrontDesk m_frontDesk;
std::vector<Command*> m_commandList;
};
int main() {
Boss boss;
boss.come();
boss.go();
return 0;
}
```
在这个示例中,把老板的到来和离开视为两个请求,用 `Boss` 类表示请求者,用 `Employee`、`Driver` 和 `FrontDesk` 三个类表示接收者,用 `Command` 类表示抽象命令,用 `WorkCommand`、`StockCommand`、`CleanCommand`、`ServiceCommand` 和 `MakeupCommand` 五个类表示具体命令。在请求者执行请求时,依次执行相关的具体命令即可。