Как создать одноэлементный абстрактный базовый класс, в котором все производные классы вместе могут создавать только один экземпляр? (Java) - PullRequest
0 голосов
/ 21 марта 2020

Моя проблема в том, что я хочу обработать большую HTML страницу из Интернета с помощью Jsoup. Получив файл HTML, я хочу записать содержимое в файл, поэтому мне не нужно каждый раз устанавливать соединение inte rnet (для разработки и тестирования этого статуса достаточно c HTML для меня).

Из этого класса, который содержит этот документ JSoup, я хочу иметь экземпляр singleton.

Моя идея состояла в том, чтобы создать базовый класс Page и два производных класса из это (PageFromFile, PageWithHttp). В этом случае экземпляр Page не должен создаваться, но он должен содержать один абстрактный метод, getInstance. Кажется, это противоречие.

Конечно, есть тривиальный способ сделать это: у меня есть только класс Page, у него есть поле, независимо от того, был ли он прочитан из файла или из Интернета, и обращаться с вещами соответственно, но это не кажется элегантным способом. (В большинстве функций будет оператор if).

У меня два вопроса:

  1. Как бы вы реализовали мою проблему?
  2. Как Можно ли заставить его работать так, как я упоминал ранее? Так, например, есть абстрактный Animal класс, Dog и Cat расширяют его. Как я могу создать только один Animal, Dog или Cat?
...