Предположим, у вас есть параметры, хранящиеся в базе данных, которые вы хотите сохранить в постоянной во всем приложении
// Assume retrieveSystemParameter query database which allows to change parameters
public static String SYSTEM_PARAMETER = StaticUtilities.retrieveSystemParameter();
Это значение будет инициализирован один раз и не изменится до тех пор пока передислокации. При этом, если вместо того, чтобы использовать поставщик:
public static Supplier<String> SYSTEM_PARAMETER_SUPPLIER = StaticUtilities::retrieveSystemParameter;
Когда вам нужно значение где-то позвонит SYSTEM_PARAMETER_SUPPLIER.get()
при необходимости, которая будет извлекать параметр в базе данных - таким образом, если изменить параметр в базе данных, вы выиграли не нужно передислоцировать.
Как вы можете видеть, поставщики ленивы. Они выполняют работу, когда вы просите их работать (позвонив .get()) - это может дать вам некоторую выгоду в производительности, если вы будете иметь дело с ними с умом. Иногда вы вызываете метод, который ожидает переменную X
, проходящую в методе retrieveX
, а затем в этом случае не нужно X
, поскольку некоторые условия не выполнялись. В этом случае вы потеряете производительность по мере выполнения кода для извлечения X
, в то время как поставщик, который получает X
, выполнит его только при вызове .get
, и вы выполнили бы этот вызов только в том случае, если условия были выполнены.
Отказ от ответственности: постоянный параметр системы является только первый пример, который пришел мне в голову, но, учитывая, что запрос к базе данных на каждом .get() вы хотели бы кэшировать параметр и иметь .get вызова кэша() в определенном интервале.
Что делать, если вы хотите, чтобы значение не было жестко запрограммировано? – chrylis
Что делать, если вам нужна вещь, которая может генерировать новые автомобили «на лету», но вы не хотите, чтобы код, который их потреблял, имел дело с логикой их создания? 'new VehiclePainter (vehicleSupplier)' - художнику все равно, откуда берутся транспортные средства, или это автомобили или грузовики или самолеты. Он просто берет транспортные средства, которые поставщик поставляет, и рисует их. – yshavit
@yshavit можете ли вы прокомментировать какой-нибудь код? – AmeyaKetkar