Я не понимаю проблемы: клиентам фабричного класса все равно, кэшируются ли полученные ими объекты или нет.Таким образом, логика кэширования должна принадлежать фабрике.
Более того, когда вы реализуете это, вы сначала реализуете фабрику без кэширования, чтобы что-то работало быстро ( Сделайте самое простое, что могло бы работать ).Затем вы реализуете кеширование.Обратите внимание, что выполнение чего-либо еще - это случай преждевременной оптимизации .Если клиентские классы должны были знать, кэшируются ли объекты или нет, ваш процесс разработки быстро сгнил бы.
Как вы реализуете, зависит от вас.Мне нравится когда-то писать общий класс кэширования и использовать его в подобных ситуациях, но вы можете подумать о других механизмах.Кроме того, я не делаю Java, и поэтому я не могу заявить о том, что лучше делать здесь.
(PS: я вижу много шаблонных шумов в ответах на этот вопрос. Это распространено среди Java?люди всегда думают в терминах шаблонов? Здесь нет никаких синглетонов для проектирования, нет прокси-классов для написания здесь, только простое рассуждение о том, какой интерфейс не может измениться.)