我非常疲惫,试图将实际问题与理论上的等价物联系起来/链接。
我会选择一个非常简单的例子来试图说明我的问题。
假设我有一个Worker类:
class Worker {
private : // default access modifier
int workerId;
};
假设我有一个Table类:
class Table {
private : // default access modifier
int tableId;
};
假设我有一个ResturantManager类:
class ResturantMangager
private: // default access modifier
list<Table*> allTables;
list<Worker*> allWorkers;
public:
// the function should tell the worker that he should call one of its function,
// its decision to what table to put the client returned by its function
// must be somehow updated in the allTables (mark the table he chose to put the client
// as unavailable).
void putClientInTable(const Worker& worker, const Client& client);
};
现在我想允许worker将客户端放在一个可用的表中,之后我希望Resturant的类数据成员allTables将此表(通过ID查找)标记为不可用。 这意味着工作者应该能够决定选择哪个表(或者ResturantManager告诉他 - 我无法看到它是如何以不同方式实现的)然后必须更新ResturantManager的allTables。
我正在寻找一种最适合这种想法的设计模式(http://sourcemaking.com/design_patterns)。
是否有任何设计模式适用于此问题?
谢谢大家。
答案 0 :(得分:3)
“我只是不确定是否有适合这个想法的设计模式我可以使用它。它总是比再次发明轮子更好?
一种非常令人愉快的方法。但要正确回答你的问题,你应该问自己“有什么想法?”。存在解决一般问题的模式。您的问题涉及餐馆和工人,因此,您可能会发现选择特定模式很麻烦。
此外,在所有情况下都没有采用“神圣”的设计模式。没有适合模拟餐馆,汽车或其他任何设计模式的设计模式。您必须从模型中抽象这些细节,并找出您正在解决的问题的本质。
你想在班级之间建立什么样的关系?如何导航这些协会?
程序不是静态数据库:它们对您的数据进行某些事情,并且您的数据结构应该以最适合它们的方式设计,以便处理算法应该这样做。很少有像“普遍好”的设计这样的东西。如果有人告诉你他的话,请怀疑他。
您的程序是否应该找出某个客户所在的桌子?它应该找出哪些顾客坐在哪张桌子上?它是否应该找出哪些服务员在服务哪个顾客,哪个餐桌,或者每个服务员在一天中服务同一张餐桌的次数?
换句话说,您的计划的运营要求是什么?执行上述查找的频率有多高?插入是否比查找更频繁?并且按照客户名称或表的ID查找比在整个表/服务员/客户中进行简单迭代以打印报告更频繁?
如果您没有明确适合的内容,则无法找到正确的设计。总而言之,你应该做两件事:
答案 1 :(得分:1)
正如我所见,您希望随时了解所有表的状态?
一个设计理念是 - 在父类或主类中维护全局数据集(在您的示例中,在餐厅经理类中为Table * allTables)。 -write函数在您的worker类中,它将Table *的指针作为要处理的参数之一。 - 使用指向主类中数据集的指针调用此函数。
希望它有所帮助。
答案 2 :(得分:1)
coupla的想法。
您的餐厅经理可能只是餐厅,因为它包含餐桌。经理不包含表格。 : - )
工人和桌子应放在容器中。 STL提供了很多。
PutClientInTable函数可以是Table类的成员。这样你可以通过“查看”来判断一个表是否被占用(如果你将“GetIsOccupied()”添加到Table类中。)
餐厅可以为工人提供公共功能“GetNextAvailableTable”。