У меня есть два класса: Foo.class , FooContainer.class и FooContainerUser.class
Foo.class
class Foo {
private Map<String, String> fooData;
public Foo () {
fooData = new HashMap<>();
}
public Map<String, String> getFooData() {
return new HashMap<>(fooData);
}
FooContainer.class
public class FooContainer {
private Map<String, Foo> fooMap;
public FooContainer () {
fooMap = new HashMap<>()
}
// First getter implementation
public Map<String, Foo> getFooMap() {
return new HashMap<>(fooMap);
}
// Second getter implementation
public Map<String, String> getFooData(String fooName) {
Foo selectedFoo = fooMap.get(fooName);
if (selectedFoo != null) {
return selectedFoo.getFooData();
} else return null;
}
Предположим, что классы Foo и FooContainer находятся в одном пакете, а класс с именем FooContainerUser находится в пакет, являющийся родителем пакета, в котором находятся предыдущие классы.
Класс FooContainerUser предоставляется как экземпляр FooContainer. Ему необходимо получить данные из экземпляров Foo, которые FooContainer содержит по какой-то причине, например, для отображения данных.
Это приводит меня к моему вопросу:
- Должен ли я создавать класс Foo publi c и заставить FooContainerUser использовать первую реализацию получателя класса FooContainer, или я должен вместо этого сделать пакет класса Foo закрытым и заставить FooContainerUser использовать вторую реализацию получателя класса FooContainer?
- Предположим, что вторая реализация геттера является предпочтительной. Что, если я создам дополнительный класс, расширяющий класс Foo, с большим количеством, но разными полями для каждого подкласса, а разные подклассы необходимо хранить в FooContainer? Следует ли мне реализовать больше методов получения в FooContainer, указывающем c для каждого подкласса Foo?
Извините, если я допустил ошибки в объяснении своей проблемы. Я относительно новичок в программировании и хочу изучить базовые c шаблоны проектирования.