我试图实现工厂模式,并遇到问题。我尝试让我的课程变得简单。基本上我有一个基类数据包类(PacketHeader)与一些领域和方法。我还有很多派生的数据包类,例如:InfoPacket1011,UsagePacket1011,InfoPacket1014,UsagePacket1014,它们都从PacketHeader基类继承而来。使用不同的返回类型实现工厂模式
正如你所看到的每个数据包都有一个版本,我的目标是根据它们的版本来处理这些数据包。 (!这本身就是一个派生类),所以我应该有两个派生类,一个是1011,一个用于1014
的基类看起来是这样的:
public abstract class PacketHandlerBase : Engine
{
public abstract bool SendInfoPacket(int someInt, string someInput);
public abstract List<???> BuildInfoPacket(string someInput);
public abstract bool SendUsagePacket(int someInt, string someInput);
public abstract List<???> BuildUsagePacket(string someInput);
//...
//...
//...
}
我的问题是,这样的方法作为BuildInfoPacket和BuildUsagePacket我必须返回该类型的列表。所以在派生类中我可以有:
public class PacketHandler1011 : PackerHandlerBase
{
//...
public override bool SendInfoPacket(int someInt, string someInput);
{
// code implementation
// return true or false
}
public override List<InfoPacket1011> BuildInfoPacket(string someInput);
{
// code implementation
// return List<InfoPacket1011>
}
}
public class PacketHandler1014 : PackerHandlerBase
{
//...
public override bool SendInfoPacket(int someInt, string someInput);
{
// code implementation
// return true or false
}
public override List<InfoPacket1014> BuildInfoPacket(string someInput);
{
// code implementation
// return List<InfoPacket1014>
}
}
我不知道在PacketHandlerBase类使用什么能够覆盖它的派生类。我想我需要泛型方法和接口,但不知道如何处理。
[编辑]:我修复了关于数据包继承问题的第一部分。谢谢大家的回答,我阅读并告诉你它们是否有效。
[解答]:谢谢大家的回复。我通过传递List并将其转换为方法和调用者来解决问题。那么我的代码比我在这里提供的更复杂,我刚完成修改它。我也改变了抽象工厂的模式来解决一些其他问题。
任何帮助将不胜感激。 在此先感谢
列表? –
felipekm