Я понимаю концепцию дизайна одноэлементного дизайна, но я никогда не сталкивался с реализацией одноэлементного шаблона в приложениях Java или веб-приложениях. Так скажите мне, где мы используем этот подход в приложениях реального времени.Использование шаблона одноэлементного дизайна в реальном времени java-приложения
ответ
Как описано в шаблоне, в любое время, когда вы хотите, чтобы существовал только один экземпляр , вы должны использовать шаблон Singleton.
Общим примером может быть объект Logger. В системе может быть много мест, где можно вызвать регистратор, чтобы что-то записать. Но вам может понадобиться только один такой экземпляр. Это может быть особенно актуально, если построение экземпляра - тяжелая операция.
Что-то вроде этого:
public class Logger {
private static final Logger INSTANCE = new Logger();
private Logger() {
// do something to initialize the logger
}
public static Logger getInstance() {
return INSTANCE;
}
// implementation ...
}
Тогда любой код, который должен ссылаться на регистратор не нужно его экземпляр (не может, на самом деле), а вместо этого просто использует одноплодной:
Logger.getInstance().Log("some message");
Другие примеры в реальном мире могут включать контейнер для инъекций зависимостей, службу доступа к данным только для чтения (такую как служба поиска, которая кэширует результаты) и т. Д. Вообще-то, где инициализация или повторные операции могут быть тяжелыми и которые являются потоками -безопасно.
он уже знает сам образец, он хотел бы знать, где он наиболее часто используется. но хороший ответ. ;) – ChrisKo
@ChrisKo: Понял, но я фигурирую за полноту, я также могу быть тщательной. – David
Почему вы отметили это как ответ? я ответил перед ним, и я не представил пример кода, так как вы сказали, что знаете шаблон – ChrisKo
Синглтон всегда имеет смысл при работе с тяжелыми объектами, где нет смысла иметь более одного экземпляра по всему приложению. Поскольку вы имеете дело с веб-приложениями, вам нужно иметь дело с объектами, которые одинаковы для каждого пользователя/сеанса/запроса. Пул соединений с базами данных - это, вероятно, хороший пример или сервлет. Не имеет смысла создавать новый пул для каждого запроса. Один пул для всего приложения должен быть достаточным. Другими примерами являются, вероятно, Loggers, Email-Client, Global-Settings, эти вещи должны быть одинаковыми для каждого пользователя, иначе у вас не будет ресурсов. Или я понял что-то не так?
Вы пытались найти какую-либо реализацию? Что вы столкнулись? – Sid
Вы имеете в виду реальные приложения * life * или приложения реального времени *, которые являются очень специфическим классом приложений? – RealSkeptic
Это может помочь: –
Sterls