Извините, если это звучит просто, но я ищу некоторую помощь для улучшения моего кода:)
Итак, у меня есть следующая реализация (которую я также написал):
public interface IOptimizer
{
void Optimize();
string OptimizerName { get; }
}
public abstract AbstractOptimizer : IOptimizer
{
public void Optimize()
{
// General implementation here with few calls to abstract methods
}
}
public abstract AbstractPriorityOptimizer : AbstractOptimizer
{
// Optimize according to priority criteria.
string Name
{
get { return "Priority Optimizer"; }
}
}
Затем у меня есть специфичные для конкретной технологии конкретные классы:
TechnologyXPriorityOptimizer : AbstractPriorityOptimizer
TechnologyYPriorityOptimizer : AbstractPriorityOptimizer
Теперь я пытаюсь добавить общий оптимизатор, который оптимизируется для условий, отличных от приоритета, поэтому моя попытка:
public abstract AbstractGenericOptimizer : AbstractOptimizer
{
// Optimize according to a generic criteria.
private readonly int param;
public AbstractGenericOptimizer (int param) : base()
{
// param affects the optimization
this.param = param;
}
}
и мне также нужна техническая реализация, как и оптимизатор приоритетов:
TechnologyXGenericOptimizer : AbstractGenericOptimizer
TechnologyYGenericOptimizer : AbstractGenericOptimizer
Q1. TechnologyXPriorityOptimizer и TechnologyXGenericOptimizer имеют одинаковые точные "дополнительные" методы, поскольку они связаны с одной и той же технологией. Есть ли способ сохранить этот метод общим для обеих ветвей наследования?
Q2. Для AbstractGenericOptimizer оптимизатор имеет специальное имя для специальных значений int param, так что было бы неплохо расширить базовый класс оптимизатора (где параметр жестко запрограммирован), а затем для каждого подразделения, имеют технологию -специфическая реализация:
AbstractSpecialName1Optimizer: AbstractGenericOptimizer
TechnologyXSpecialName1Optimizer: AbstractSpecialName1Optimizer
TechnologyYSpecialName1Optimizer: AbstractSpecialName1Optimizer
AbstractSpecialName2Optimizer: AbstractGenericOptimizer
....
Каким будет лучший способ реорганизации этого сценария? Я считаю, что существует более разумный способ уменьшить количество уровней наследования.
Спасибо!