我面临的问题是在继承树的叶子之间交换信息,但是特定叶子只需要与其他特定叶子交换信息而不是所有现有叶子。 请查看以下(大大简化的)继承树和示例实现:
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,所以它看起来很臃肿,设计不好。我想知道是否有更好的方法,或者如果他们从头开始设计这个,如何处理它。
提前致谢。
答案 0 :(得分:0)
为什么该项目不能带有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);
}