Вы должны использовать некоторые из шаблонов Factory Method .
Обычно это реализуется с помощью ряда классов, производных от общей базы или реализации общего интерфейса - это зависит от отношений между классами. Давайте перейдем ко второму варианту и предположим, что ICommon
. Затем вы заполняете карту «отличительных значений» экземплярами Action<ICommon>
.
В вашем примере мы могли бы иметь:
var map = Dictionary<string, Action<ICommon>()
{
{ "O", () => new Order() },
{ "S", () => new Subsection() },
};
Затем вы создаете фабричный метод, который принимает любой введенный вами текст, находит соответствующее действие на карте, создает объект и возвращает его вызывающей стороне:
public static ICommon CreateCommon(FileLine line)
{
// assume map is visible
var producer = map[line.Type];
return producer();
}
Это все, что нужно сделать. Обычно все это упаковано в статический класс, и в зависимости от особенностей вашего случая карта может быть заполнена жестко закодированными данными, или автоматически по некоторому алгоритму (например, конструктор static
класса, который их упаковывает) или даже программно Ваш код перед использованием фабричного метода.