отказ от ответственности: я говорю здесь на языке java
синглтон теперь считается антипаттерном, в основном потому, что в последнее время им часто злоупотребляют, поскольку они являются быстрым и удобным способом обмена данными в приложении - что в некоторой степени является чрезмерным расширением шаблона проектирования, который больше подходит для обеспечения контроля доступа к общий ресурс.
рассмотрим стандартный программный вывод: доступ к этому ресурсу должен быть защищен одной точкой доступа, чтобы обеспечить синхронизацию записей, поэтому у вас есть, например, System.out как статический экземпляр в java.
проблема в том, что когда вы начинаете иметь синглтон, вам нужно знать каждую мельчайшую деталь того, что вы делаете, потому что вы делаете много строгих предположений о вашем синглтон-классе, самое важное, что это будет единственный класс в системе. затем вы начинаете использовать его, предполагая, что он всегда будет единственной точкой входа в ваш ресурс, и тогда возникает неприятная ошибка, поскольку ваш класс теперь развернут на сервере ejb, и у каждого контекста ejb есть свой собственный синглтон, плюс еще один синглтон для каждый jsp, который был перезагружен с сервера, плюс один синглтон за каждый сериализацию и десериализацию вашего синглтона (как вы, вероятно, забыли переопределить метод readResolve ()).
так вот почему синглтон нужно использовать с большой осторожностью, и теперь он считается антипаттерном, несмотря на то, что он полностью полезен по назначению.
в случае кеша базы данных, было бы лучше, чтобы каждый класс, нуждающийся в кеше, использовал прокси для этого ресурса «кеша», поэтому вы можете добавить логику для «поиска ресурса» внутри Сам прокси вместо того, чтобы логика была привязана к извлечению одиночного кэша, который может работать или не работать в зависимости от среды.
так что в нескольких словах использование синглтона в качестве средства общего доступа к ресурсу - это плохо, потому что вы жестко программируете метод поиска ресурса (и игнорируете ловушки синглтона), в то время как использование синглтона для управления ресурсом с целью синхронизации является вполне приемлемо.
Подумайте о семафорах, это работает, только если вы всегда можете получить один и тот же семафор. в этом последнем случае может возникнуть проблема с доступом к синглтону везде, где вам нужен доступ к этому семафору: здесь вам понадобится некоторый класс, чтобы обернуть синглтон и обеспечить более точное управление жизненным циклом самого семафора.
прокси предназначены для выполнения роли «предоставления ресурса в системе», будь то отдельное приложение, система клиент-сервер, различные компоненты одной и той же системы и т. Д., С дополнительным преимуществом, что при использовании метода èrpxy поиска ресурса непрозрачен. у вас может быть, что они предоставляют вам синглтон, содержащий хэш-карту кэшированных значений, у вас может быть доступ к memcached где-то в сети, вы можете иметь их для чтения csv во время тестов, и все это без изменения способа их вызова из приложения.