У меня есть два алгоритма, которые я реализую:
- Алгоритм A, который работает со значениями Vector и
- АлгоритмB, работающий со значениями Matrix
Что общего у алгоритмов:
- Оба являются алгоритмами «суммирования», которые снабжены одной и той же последовательностью входных данных. Алгоритмы немного различаются в зависимости от того, следует ли учитывать конкретное значение или нет. Они также различаются по вычислениям, которые должны выполняться для каждого значения последовательности.
- На оба алгоритма ссылается один и тот же объект (например, «
Antenna
», который использует алгоритм для передачи или получения). - В обоих случаях я хочу иметь возможность сериализовать результат вектора или матрицы. Кроме того, я должен иметь возможность инициализировать любой из алгоритмов (десериализованными) значениями вектора/матрицы, вычисленными из более раннего поколения.
Сначала я попытался реализовать описанное выше с помощью шаблона «Стратегия», но вскоре понял, что шаблон стратегии может быть не самым лучшим из-за различных типов/значений. И чтобы еще больше усложнить ситуацию, мой объект 'Antenna
' может использовать любой из алгоритмов в любом направлении:
class Antenna
{
private AlgorithmParams _algorithm;
}
class AlgorithmParams
{
private IAlgorithm _transmit;
private IAlgorithm _receive;
}
который, как мне кажется, многократно дублирует понятие «передача» и «получение» (поскольку AlgorithmA
, который реализует IAlgorithm, сам имеет производные типы «AlgorithmATransmit
» и «AlgorithmAReceive
», т.е. небольшие вариации в пределах одного и того же алгоритма в зависимости от направления).
Я также хотел бы иметь более четкое разделение между логикой алгоритма и сериализованными данными.
Буду рад услышать ваши мнения по этому поводу. Спасибо !