Эта статья разделяет конкретный код модели синглтона дизайна Java для вашей ссылки. Конкретный контент заключается в следующем
концепция:
Одиночный рисунок: в классе есть только один экземпляр.
У класса есть только один экземпляр и обеспечивает глобальную точку доступа.
Причины использования этого режима:
Когда мы просматриваем веб -сайты, на некоторых веб -сайтах будет отображаться «текущее количество людей в Интернете». Как правило, способ реализации этой функции состоит в том, чтобы сохранить каждый вошел в систему IP в памяти, файле или базе данных, и каждый дополнительный IP достигнут «+1». Как правило, это метод, такой как add (), чтобы реализовать функцию «+1». Например, используйте оператор «Обновление», чтобы сначала получить данные, хранящиеся в базе данных, затем +1, обновите данные в базе данных, а затем сохраните его; При отображении на странице вы можете получить данные в базе данных с помощью другого метода. Однако, когда несколько пользователей входят в систему одновременно, если каждому из них необходимо новое объект, затем выполнить метод add () через вызов «Объект. Имя метода», а затем сохранить данные в базе данных, это приведет к тому, что несколько пользователей не смогут точно записать фактические данные пользователя в базу данных. Следовательно, разработка этого счетчика как глобального объекта (каждый использует этот объект, а не один, новый), и каждый имеет одни и те же данные, может избежать подобных проблем. Это одно из приложений схемы синглтона, которое мы называем.
Аналогичным образом, в других сценариях будут встречаться аналогичные сценарии, и будут использоваться аналогичные идеи. например:
1. Внешние ресурсы: у каждого компьютера есть несколько принтеров, но только один принтеры можно использовать, чтобы одновременно избежать двух заданий для печати в принтер. Внутренние ресурсы: большинство программного обеспечения имеют один (или более) файлы атрибутов для хранения системных конфигураций. Такая система должна иметь объект для управления этими файлами атрибутов. 2. Диспетчер задач Windows (диспетчер задач) является типичным режимом Singleton (это очень знакомо). Подумайте об этом, можете ли вы открыть двух менеджеров по заданиям Windows? Если вы не верите в это, попробуйте сами ~
3. Recycle Bin для Windows также является типичным приложением Singleton. В течение всей работы системы летальная корзина поддерживала только один экземпляр.
4. Счетчик веб -сайта обычно реализуется в режиме Синглтона, в противном случае его будет трудно синхронизировать.
5. Как можно реализовать приложение для журнала приложения в режиме Синглтона? Обычно это связано с тем, что общий файл журнала всегда открыт, потому что для работы может быть только один экземпляр, в противном случае контент будет трудно добавить.
6. Режим Singleton обычно используется для чтения объектов конфигурации в веб -приложениях, поскольку файл конфигурации является общим ресурсом.
7. Проектирование пулов подключений к базе данных, как правило, принимает режим синглтона, потому что подключение к базе данных является ресурсом базы данных. Использование пулов подключений к базе данных в программных системах базы данных в основном сохраняет потери эффективности, вызванные открытием или закрытием подключений базы данных. Эта потеря эффективности по -прежнему очень дорого, потому что режим синглтона может значительно снизить эту потерю.
8. Дизайн многопоточных пулов потоков обычно принимает режим Синглтона, потому что пул потоков должен облегчить управление потоками в бассейне.
9. Файловая система операционной системы также является конкретным примером реализации большого синглтонского режима. Операционная система может иметь только одну файловую систему.
10. Httpapplication также является типичным применением примеров единиц. Любой, кто знаком со всем жизненным циклом запроса ASP.NET (IIS), должен знать, что HTTPApplication также является синглтонским шаблоном, и все HTTPModules имеют экземпляр HTTPApplication.
Подводя итог, общие сценарии применения режима Синглтона:
1. Объекты, которые необходимо часто создавать экземпляры, а затем уничтожать.
2. Объекты, которые занимают слишком много времени или слишком много ресурсов при создании объектов, но часто используются.
3. Stateful Tool-подобные объекты.
4. Частый доступ к объектам базы данных или файлов.
5. В случае обмена ресурсами избегайте производительности или убытков, вызванных операцией ресурсов. Такие как файлы журнала, конфигурации приложения и т. Д. В вышеперечисленном.
6. При контроле ресурсов облегчайте взаимное общение между ресурсами. Такие как бассейны ниток и т. Д.
Функции:
1. В классе Синглтона может быть только один экземпляр;
2. Класс Синглтона должен создать свой собственный уникальный экземпляр;
3. Класс Синглтона должен предоставить этот экземпляр всем другим объектам.
Синглтонные элементы рисунка:
1. Частный метод строительства
2. Частный статический ссылочный указатель на ваш собственный экземпляр
3. Публичный статический метод со своим собственным экземпляром в качестве возврата
Есть три способа внедрения синглтонского рисунка:
1. Голодный стиль: одноэтажные экземпляры создаются при загрузке класса и срочно инициализируются. (Метод предварительной нагрузки)
/*** Стиль голодного человека (рекомендуется) **/public class test {private test () {} public Static Test Extance = new Test (); public Test getInstance () {return Encement; }} преимущество
1. Безопасность нити
2. Статический объект был создан во время загрузки класса, и скорость отклика быстро
недостаток
Эффективность ресурсов не высока, и getInstance () никогда не будет выполнена, но если выполняются другие статические методы класса или загружаются класс (class.forname), то этот экземпляр все еще инициализируется.
2. Ленивый стиль: экземпляры Singleton создаются при первом использовании и инициализируются.
Class Test {private test () {} public Static Test Extance = null; public Static Test getInstance () {if (encement == null) {// Когда несколько потоков определяют, что экземпляр нулю, несколько потоков будут иметь дублирование при выполнении новых операций exante = new singleton2 (); } return Encement; }} преимущество
Избегайте создания случаев, не используя их в виде голодных людей. Коэффициент использования ресурсов высок. Если вы не выполняете getInstance (), вы не будете Instancanc. Другие статические методы этого класса могут быть выполнены.
недостаток
В одном потоке нет проблем с ленивым стилем, но когда коллеги получают доступ к нескольким потокам, они могут создавать несколько экземпляров, и эти несколько экземпляров не являются одним и тем же объектом. Хотя созданные поздние экземпляры будут перезаписать созданные экземпляры, созданные в первую очередь, все равно будут случаи, когда будут получены различные объекты. Решение этой проблемы состоит в том, чтобы заблокировать синхнизированный, который недостаточно быстро при первой загрузке, а ненужные синхронизационные накладные расходы многопользовали высоки.
3. Двойное обнаружение
Class Test {private test () {} public Static Test Extance = null; public Static Test getInstance () {if (exance == null) {synchronized (test.class) {if (encement == null) {encement = new test (); }} return Encement; }} преимущество
Коэффициент использования ресурсов высок. Если вы не выполняете getInstance (), вы не будете Instancanc. Вы можете выполнить другие статические методы этого класса.
недостаток
Ответ не был быстрым при загрузке в первый раз, и иногда потерпел неудачу по некоторым причинам модели памяти Java.
4. Статические внутренние классы
Class Test {private Test () {} private Static Class SingletonHelp {Static Test Encement = new Test (); } public Static Test getInstance () {return singletonHelp.instance; }} преимущество
Коэффициент использования ресурсов высок, и он не выполняется без получения экземпляра. Вы можете выполнить другие статические методы этого класса.
недостаток
Недостаточно быстро при загрузке в первый раз
Суммировать:
Как правило, используется голодный стиль. Если вы очень заботитесь о ресурсах, вы можете использовать статические внутренние типы. Не рекомендуется использовать ленивый стиль и двойное обнаружение.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.