Когда мне следует делать объекты package-private или publi c? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть два класса: 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 содержит по какой-то причине, например, для отображения данных.

Это приводит меня к моему вопросу:

  1. Должен ли я создавать класс Foo publi c и заставить FooContainerUser использовать первую реализацию получателя класса FooContainer, или я должен вместо этого сделать пакет класса Foo закрытым и заставить FooContainerUser использовать вторую реализацию получателя класса FooContainer?
  2. Предположим, что вторая реализация геттера является предпочтительной. Что, если я создам дополнительный класс, расширяющий класс Foo, с большим количеством, но разными полями для каждого подкласса, а разные подклассы необходимо хранить в FooContainer? Следует ли мне реализовать больше методов получения в FooContainer, указывающем c для каждого подкласса Foo?

Извините, если я допустил ошибки в объяснении своей проблемы. Я относительно новичок в программировании и хочу изучить базовые c шаблоны проектирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...