#pragma once
#include
#include
#include
const std::string c_stateToStrCourier[] = { "收到", "验证可达性", "分配人员", "派送包裹", "获取交货确认", "完成" };
const std::string c_stateToStrVendor[] = { "收到", "确认库存", "从仓库得到物品", "包装", "联系快递员", "完成" };
const std::string c_stateToStrOrderTeam[] = { "收到", "确认付款", "联系供应商", "完成" };
const int c_nMsec = 300; // 休眠时间(毫秒) - Sleep(c_nMsec) 处可以替换为一些有用的代码
// 订单团队
class OrderTeam
{
public:
void submitRequest() {
m_nState = 0;
}
// 检测状态
bool checkStatus() {
std::cout << "订单团队 - 当前状态:" << c_stateToStrOrderTeam[m_nState] << std::endl;
Sleep(c_nMsec);
m_nState++;
return (m_nState == Complete);
}
private:
enum States {
Received, // 收到
VerifyPayment, // 确认付款
ContactVendor, // 联系供应商
Complete // 完成
};
int m_nState;
};
// 供应商
class Vendor
{
public:
void submitRequest() {
m_nState = 0;
}
// 检测状态
bool checkStatus() {
std::cout << "供应商 - 当前状态:" << c_stateToStrVendor[m_nState] << std::endl;
Sleep(c_nMsec);
m_nState++;
return (m_nState == Complete);
}
private:
enum States {
Received, // 收到
VerifyInventory, // 确认库存
GetItemFromWareHouse, // 从仓库得到物品
PackItem, // 包装
ContactCourier, // 联系快递员
Complete // 完成
};
int m_nState;
};
// 快递员
class Courier
{
public:
// 将请求转发给快递员
void submitRequest() {
m_nState = 0;
}
// 检测状态
bool checkStatus() {
std::cout << "快递员 - 当前状态:" << c_stateToStrCourier[m_nState] << std::endl;
Sleep(c_nMsec);
m_nState++;
return (m_nState == Complete);
}
private:
enum States {
Received, // 收到
VerifyReachbility, // 验证可达性
AssignPerson, // 分配人员
DispatchPackage, // 派送包裹
GetDeliveryConfirmation, // 获取交货确认
Complete // 完成
};
int m_nState;
};
#pragma once
#include "sub_system.h"
// 网购外观
class OnlineShoppingFacade
{
public:
OnlineShoppingFacade() {
m_nCount = 0;
}
// 返回跟踪次数
int followupNum() {
return m_nCount;
}
// 提交订单
void submitRequest() {
m_nState = 0;
}
// 跟踪订单
bool checkStatus() {
// 收到订单请求
switch (m_nState) {
case Received:
m_nState++;
// 将请求转发给订单团队
m_order.submitRequest();
std::cout << "********** 提交给订单团队,跟踪次数:" << m_nCount << " **********" << std::endl;
break;
case SubmittedToOrderTeam:
// 如果订单团队完成验证,则向供应商发出请求
if (m_order.checkStatus()) {
m_nState++;
m_vendor.submitRequest();
std::cout << "********** 提交给供应商,跟踪次数:" << m_nCount << " **********" << std::endl;
}
break;
case SubmittedToVendor:
// 如果供应商已将包裹打包,将其转发给快递员
if (m_vendor.checkStatus()) {
m_nState++;
m_courier.submitRequest();
std::cout << "********** 提交给快递员,跟踪次数:" << m_nCount << " **********" << std::endl;
}
break;
case SubmittedToCourier:
// 如果包裹交付,订单完成
if (m_courier.checkStatus())
return true;
default:
break;
}
m_nCount++;
// 订单未完成
return false;
}
private:
enum States {
Received, // 收到
SubmittedToOrderTeam, // 提交给订单团队
SubmittedToVendor, // 提交给供应商
SubmittedToCourier // 提交给快递员
};
int m_nState; // 订单状态
int m_nCount; // 跟踪次数
OrderTeam m_order;
Vendor m_vendor;
Courier m_courier;
};
#include "facade.h"
int main()
{
OnlineShoppingFacade facade;
// 提交订单
facade.submitRequest();
// 跟踪订单,直到订单完成
while (!facade.checkStatus());
std::cout << "********** 订单完成,跟踪次数:" << facade.followupNum() << " **********" << std::endl;
getchar();
return 0;
}