Singleton с финализатором, но не IDisposable

Просто добавьте третий вариант:

require(doBy)
summaryBy(Frequency~Category, data=yourdataframe, FUN=sum)

EDIT: это очень старый ответ. Теперь я бы рекомендовал использовать group_by и суммировать из dplyr, как в ответе @docendo.

15
задан Ben Robbins 21 January 2009 в 00:38
поделиться

5 ответов

Если неуправляемый ресурс выпущен только на выходе приложения, Вы не должны даже волноваться с финализатором, так как процесс разгружается, должен иметь дело с этим для Вас так или иначе.

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

я второй те, которые говорят, что этот дизайн является возможно не правильным поступком (и будет мешать фиксировать, впоследствии, Вы находите действительно фактическую необходимость в двух экземплярах), Создают объект (или ленивый интерфейсный объект загрузки) в точке входа и передают его через код туда, где необходимо, проясняя, кто ответственен за то, если это, для кого, затем Вы свободны изменить решение использовать только один с небольшим эффектом к остальной части кода (который использует то, что это дано)

5
ответ дан 30 November 2019 в 22:37
поделиться

Я сначала упомянул бы, что шаблоны Объектно-ориентированного проектирования и их последствия не всегда влияют на каждое решение языка, даже на Объектно-ориентированных языках. Можно, конечно, найти классические шаблоны разработки, которые легче реализовать на одном языке (Smalltalk) в противоположность другому (C++).

Однако я не уверен, что соглашаюсь с предпосылкой, что одноэлементный экземпляр должен только быть расположен в конце приложения. Ничто в описаниях шаблона разработки, которые я прочитал для Singleton (или Шаблоны разработки: Элементы допускающего повторное использование Объектно-ориентированного программного обеспечения ), упоминают это как свойство этого шаблона. Одиночный элемент должен гарантировать, что только один экземпляр класса существует в любой момент вовремя; это не подразумевает, что должно существовать столько, сколько приложение существует.

у меня есть чувство, что на практике, много одиночных элементов действительно существуют для большей части срока действия приложения. Однако рассмотрите заявление, которое использует соединение TCP для общения с сервером, но может также существовать в разъединенном режиме. При соединении Вы захотите, чтобы одиночный элемент поддержал информацию о соединении и состояние соединения. После того, как разъединенный, можно хотеть сохранить тот же самый одиночный элемент - или можно избавиться от одиночного элемента. В то время как некоторые могут утверждать, что имеет больше смысла сохранять одиночный элемент (и я могу даже быть среди них), нет ничего в самом шаблоне разработки, который устраняет Вас от избавления от него - если соединение переделано, одиночный элемент можно инстанцировать снова, поскольку никакой экземпляр его не существует в тот момент.

, Другими словами, можно создать сценарии, где логично для одиночных элементов иметь IDisposable.

6
ответ дан 30 November 2019 в 22:37
поделиться

Пока Ваш финализатор не называет методы (те, которые Располагают) на любых других управляемых объектах, необходимо быть в порядке. Просто помните, что порядок завершения не детерминирован. Таким образом, если Ваш одиночный элемент возражает, что Foo держит ссылку на панель объектов, которая требует распоряжения, Вы не можете надежно записать:

~Foo()
{
    Bar.Dispose();
}

сборщик "мусора" уже, возможно, собрал Панель.

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

4
ответ дан 30 November 2019 в 22:37
поделиться

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

Рискуя тем, чтобы дать субъективный совет дизайна: Если объект является действительно не сохраняющим состояние, сделайте его статическим классом. Если это с сохранением информации, вопрос, почему это - Singleton: Вы создаете изменяемую глобальную переменную. При попытке получить приложение близко, соглашение с ним, когда Ваш основной цикл выходит.

2
ответ дан 30 November 2019 в 22:37
поделиться

Применимость Singleton к какой-то конкретной ситуации в стороне,

я думаю, что нет ничего неправильно с Избавлением от Singleton. В сочетании с ленивым инстанцированием это просто означает выпуск ресурса, если Вы не нуждаетесь в нем временно и затем повторно получаете его по мере необходимости.

0
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

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