Я пытаюсь внедрить шаблон фабрики, и у меня возникла проблема. Я стараюсь сделать мои классы простыми. В основном у меня есть базовый пакетный класс (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