Я создал свою собственную реализацию дерева для various reasons и придумал два класса - «базовый» класс, который является общим узлом дерева, который заполнен логикой и другим классом, который расширяет ту, которая является более специализированной.Возможно ли, чтобы объекты «перехватывали» объекты в базовых классах?
В моем базовом классе определенные методы включают создание экземпляров новых узлов дерева (например, добавление дочерних элементов). Эти экземпляры находятся внутри логики (например, в вложенном цикле), что делает логику трудно отделить от момента создания.
Итак, если я не переопределяю эти экземпляры в конкретном классе, будет создан неправильный тип узла. Тем не менее, я не хочу переопределить эти методы, потому что они также содержат общую логику, которая не должна дублироваться!
Проблема может быть сводились к следующему:
public class Foo {
public String value() { return "foo"; }
public Foo doStuff() {
// Logic logic logic..
return new Foo();
}
}
class Bar extends Foo {
public String value() { return "bar"; }
}
new Bar().doStuff().value(); // returns 'foo', we want 'bar'
Первое, что пришло мне в голову бы иметь «создать крюк», которые расширяют классы могли переопределять:
public Foo createFooHook(/* required parameters */) {
return new Foo();
}
Сейчас. в то время как это была прекрасная первая мысль, есть зловоние, срывающее с этого кода что-то ужасное. Есть что-то очень ... неправильный об этом.
Это как приготовление пищи в то время как голый - он чувствует себя опасным и не нужен.
Итак, как бы вы справились с этой ситуацией?
Я хотел бы дать другое имя метода крюк(), например createObjec() или createFooInstance(). – 2008-09-29 09:53:45