Извините, если это звучит просто, но я ищу некоторую помощь для улучшения моего кода:)
Итак, у меня есть следующая реализация (которую я также написал):
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
....
Каким будет лучший способ реорганизации этого сценария? Я считаю, что существует более разумный способ уменьшить количество уровней наследования.
Спасибо!