Singleton в движении

Найдите и замените

  • Ctrl + F и Ctrl + H - Находят, Находят & замена, соответственно

  • Ctrl + сдвиг + F и Ctrl + сдвиг + H - Находят в файлах, Находят & замена в файлах, соответственно

"Находят в файлах", был огромный усилитель производительности для меня. Вместо того, чтобы переходить к каждому результату один за другим, это просто показывает Вам список результатов в Вашем всем проекте или решении. Это делает очень простым найти пример кода или видеть, используется ли функция где-нибудь.

37
задан Zoyd 12 March 2017 в 05:36
поделиться

5 ответов

Если отбросить аргумент о том, является ли реализация шаблона singleton хорошей идеей, вот возможная реализация:

package singleton

type single struct {
        O interface{};
}

var instantiated *single = nil

func New() *single {
        if instantiated == nil {
                instantiated = new(single);
        }
        return instantiated;
}

single и instantiated являются частными, но New () является общедоступным. Таким образом, вы не можете напрямую создать экземпляр single , не пройдя через New () , и он отслеживает количество экземпляров с частным логическим экземпляром . Настройте определение single по вкусу.

Однако, как отметили несколько других, это не является поточно-ориентированным, если только вы не инициализируете свой singleton только в init () . Лучшим подходом было бы использовать sync.Once , чтобы сделать за вас тяжелую работу:

package singleton

import "sync"

type single struct {
        O interface{};
}

var instantiated *single
var once sync.Once

func New() *single {
        once.Do(func() {
                instantiated = &single{}
        })
        return instantiated
}

См. Также hasan j ' Предложение просто думать о пакете как о синглтоне. И, наконец, примите во внимание то, что предлагают другие: синглтоны часто являются индикатором проблемной реализации.

41
ответ дан 27 November 2019 в 04:28
поделиться

Перед тем, как пытаться найти способ согнуться. Выполните свою волю, вы можете прочитать некоторые статьи:

Таким образом, со временем люди обнаружили, что синглтоны менее оптимальны, и имхо особенно , если вы пытаетесь выполнить какую-либо разработку через тестирование : на многих уровнях они почти так же плохи, как и глобальные переменные.

[отказ от ответственности: я знаю, что это не строгий ответ на ваш вопрос, но он действительно актуален]

11
ответ дан 27 November 2019 в 04:28
поделиться

Просто разместите свои переменные и функции на уровне пакета.

Также см. Аналогичный вопрос: Как сделать синглтон в Python

9
ответ дан 27 November 2019 в 04:28
поделиться

Вы можете выполнить инициализацию с помощью пакета once :

Это гарантирует, что ваши методы инициализации будут вызваны только один раз.

3
ответ дан 27 November 2019 в 04:28
поделиться

Просто имейте один статический, конечный, постоянный, глобальный, для всего приложения экземпляр объекта, который вы хотите.

Однако это противоречит парадигме объектно-ориентированного программирования. Его использование должно быть ограничено примитивами и неизменяемыми объектами, а не изменяемыми объектами.

1
ответ дан 27 November 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: