0

我面临在继承树的叶子之间交换信息的问题,但是特定的叶子只需要与其他特定的叶子而不是所有现有的叶子交换信息。请查看以下(非常简化的)继承树和示例实现:

class station
{
virtual void transportOut(item* i, station *target) = 0;
virtual void transportIn(item* i, station *source) = 0;
};

class stationTransportOnly : public station
{
virtual void transportOut(item* i, station *target);
virtual void transportIn(item* i, station *source);
};

class stationTransportAndRotate : public station
{
virtual void transportOut(item* i, station *target);
virtual void transportIn(item* i, station *source);
};

transportOut和的示例实现transportIn可能如下所示:

void transportOut(item *i, station *target)
{
 target->transportIn(i, this);
 SendTransportOutCommandToRealMachine(i. target);
}

void transportIn(item *i, station *source)
{
 SendTransportInCommandToRealMachine(i. source);
}

站点如何处理传输(例如,将哪些命令发送到站点模型的真实传送带)是站点特定的。多年来这一直很好,但现在要求发生了变化:一些车站需要比过去更多地同步他们的运输。他们的传输命令中需要一个“任务ID”,对于输出站和输入站来说必须是相同的。id 可能会在 中生成transportOut,但问题是如何携带 id 到中转站?

我可能会简单地扩展 的接口transportIn,但由于只有少数现有站需要此 id,因此对我来说似乎臃肿和糟糕的设计。我想知道是否有更好的方法,或者如果他们要从头开始设计,他们会如何处理它。

提前致谢。

4

1 回答 1

0

为什么 item 不能带有 id 属性?然后 TransportOut 可以设置该 id,然后由 TransportIn 方法读取。

像那样:

void transportOut(item *i, station *target)
{
    i->SetID(generateID());
    target->transportIn(i, this);
    SendTransportOutCommandToRealMachine(i, target);
}

void transportIn(item *i, station *source)
{
    int taskID = i->GetID();
    SendTransportInCommandToRealMachine(i, source);
}
于 2012-05-27T01:10:03.160 回答