Я работаю с любимым проектом, пытающимся практиковать (чистый?) ОО и не могу понять, как разложить на части обычное поведение из пары классов.
public Solution improve(Solution initialSolution)
{
stopCondition.setInitialSolution(initialSolution);
Solution nextSolution = initialSolution;
do
{
nextSolution = nextSolutionGenerator.generate(nextSolution);
}
while(!stopCondition.isStopConditionReached());
return nextSolution;
}
Как видите, генерирование является общим для BinaryNextSolutionGenerator и PermutationNextSolutionGenerator. Я знаю, что решение generate (решение решения) должно быть в NextSolutionGenerator, однако я не хочу потерять проверку типа во время компиляции, если я отправлю экземпляр PermutationSolution в экземпляр BinaryNextSolutionGenerator.
Похоже, я должен использовать общее программирование, или мой дизайн в корне неверен (или это общий компромисс?), Но я бы предпочел какое-то опытное мнение раньше.
Кстати, генерировать только вызовы doGenerate, потому что я планирую добавить туда общий код регистрации.