мне сказали «модель абстрактного контейнера для объектов базы данных, конструкции, принимающих на ребенок с переменным числом аргументов, а затем предоставляет некоторые функциональные возможности детей инспекционного без кода повторения».Там должна быть лучшим способом закодировать это :(
Это намеки например, «подсчет числа детей», «найти по идентификатору» и т. д.
Для простоты приведенный ниже код имеет только одно поле из базового абстрактного типа DatabaseObject (то есть имя), но у реального кода есть такие вещи, как «идентификатор» и некоторые сложные поисковые трюки метаданных.
Идея этого, безусловно, использоватьфу Я просто смотрел на то, что начал писать, заставляет меня хотеть поцеловать: это будет Франкенштейном в запутывании, если я продолжу путь по этому пути. Любой способ сделать это достойной Java? Любой шаблон проектирования для ссылки? (Composite приходит на ум ...)
Помещение: фактическая функциональность, которая будет использоваться совместно, полезна и действительно применима к любым потенциальным гнездовым типам (схемы имеют таблицы, таблицы имеют столбцы, CompositeIndex (ы) имеют субиндексы и т. Д. .), особенно поиск идентификаторов ...
... но «должен быть лучший способ». Я чувствую, что голос внутри меня говорит «всякий раз, когда вы пишете такой код, ударяйте себя в лицо».
Помощь :)
public abstract class DatabaseContainerObject<ChildType extends DatabaseObject>
extends DatabaseObject {
protected List<ChildType> children;
public DatabaseContainerObject(String name, ChildType... children) {
super(name);
this.children = new ArrayList<ChildType>(children.length);
this.children.addAll(Arrays.asList(children));
}
protected List<ChildType> getChildren() {
return Collections.unmodifiableList(children);
}
... count ...
... find ...
... sort ...
... remove ...
...
}
Да ясно случай для композит. Например. если вы хотите найти что-то в композите, всегда сначала проверяйте, удовлетворяете ли вы предикату (затем верните это или что-то еще), иначе вызовите find для всех детей. – Voo