Я пишу библиотеку классов с классом Application
. Класс Application
содержит коллекцию объектов Document
. Я хочу, чтобы класс Application
отвечал за "создание" (конструирование) Document
объектов, когда это необходимо. Я не хочу, чтобы я или другие наши разработчики могли произвольно создавать новые Document
объекты.
Я пытался придумать какой-то надежный способ обеспечить это, но я только придумал пара возможностей, и у них обоих есть недостатки.
Первый способ - это вложить класс Application
в класс Document
и сделать конструктор Document
закрытым, так что только Application
класс может получить к нему доступ. Но это не имеет смысла структурно и фактически является противоположностью истинных отношений. Не говоря уже о том, что вложенные c вложенные классы, как правило, не приветствуются.
Другой способ, которым я пытался, - сделать конструктор Document
частным, но дать ему "фабричный метод" publi c, который выполняет некоторые действия. проверка, чтобы убедиться, что он действительно был вызван Application
. Но это стало очень запутанным, когда я попытался реализовать это.
Я слишком усложняю это? Конечно, обычным делом является то, что кодовая база строится так, что разработчики могут сделать что-то, чего не должны делать? Стоит ли ожидать, что наши разработчики (и я) будем использовать благоразумие и здравый смысл, а не go при создании новых Document
объектов, когда они должны получать их из Application
вместо этого?
Или я правильно пытаюсь применить это? Правильно ли я стараюсь, чтобы занятия использовались только по назначению? В конце концов, именно для этого и нужны уровни доступа - чтобы принудительно использовать объекты только в правильном контексте. Если это разумное занятие, есть ли у кого-нибудь какие-либо предложения о том, как это сделать в этих обстоятельствах?
Примечание: я нашел эту похожую тему:
java - сделать класс только экземпляром из Speci c класс . Но предлагаемое решение было вложенными классами, которые не являются хорошим вариантом по причинам, которые я привел выше.