2010-10-18 3 views
8

Я разрабатываю приложение на основе swing, где я использую много FileDialogs? Поэтому я говорю, почему бы не сделать только один объект FileDialog вместо всех этих экземпляров и использовать его во всем проекте? Это хорошее предположение? имеет ли это улучшение производительности?Должен ли я использовать File Dialog как Singleton?

Благодаря

ответ

8

Это отличный пример использования, когда производительность приложения не имеет большого значения, и вопрос фактически попадает в класс преждевременной оптимизации решения проблем. Зачем? Использование FileDialog означает, что вы взаимодействуете с пользователем, который, даже если квалифицированный специалист, владеющий клавишами быстрого доступа Kung Fu, будет на несколько порядков медленнее, чем приложение. Сколько FileDialogs может быстро открыть пользователя, использовать его и закрыть за одну минуту? Скажите дюжину. Вам не нужно заботиться о дюжине предметов, которые приходят и уходят за одну минуту. Не должно появляться даже на вашем радаре. Используйте свою энергию в другом месте. На самом деле, вы должны каждый раз создавать новый объект и избегать любых кеширующих головных болей.

+0

+1 очень красиво сказано и сильная точка с преждевременной оптимизацией. – chiccodoro

3

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

Это избавит вас от головной боли, пытаясь выяснить, читаете ли вы правильный путь из диалогового окна или кто-то открыл диалог и выбрал новый путь, и теперь вы ссылаетесь на этот новый путь скорее чем первоначально выбранный путь и т. д.

1

Зачем применять синглтон? Можете ли вы проверить, что отображение двух диалоговых окон никогда не произойдет?

Лучше иметь его как обычный класс; вы не хотите создавать ограничения, которые могут стать причинами боли позже.

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

0

Забудьте о производительности/скорости. Здесь неважно. Семантика имеет значение. Повторное использование того же файла диалога может дать вам вещи бесплатно. Будет ли диалог запускаться в том же каталоге каждый раз? Это будет, если это тот же самый экземпляр. Если вы создаете новые диалоги, вам нужно будет установить startup dir your self.

Также почему невозможно создать несколько экземпляров? Просто сделайте член экземпляра в своем фрейме и сделайте с ним.