Должен ли этот объект быть одиночным? - PullRequest
1 голос
/ 05 декабря 2010

Комментарий на один из моих других вопросов заставил меня задуматься. Прямо сейчас я использую синглтон Session. Это инкапсуляция постоянного TCP-соединения с моим сервером. Он должен подключаться при запуске приложения и оставаться на связи в течение всего срока службы приложения. Мне нужно только 1 (нет смысла иметь несколько подключений к моему серверу из одного приложения). И это должно быть доступно во всем мире.

Плохо ли использовать синглтон для такого типа объектов?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2010

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

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

2 голосов
/ 05 декабря 2010

Если никогда не может быть больше 1, и оно должно быть доступно глобально, то здесь синглтон-паттерн имеет смысл. Однако эта информация была исключена из вашего предыдущего вопроса, поэтому я прокомментировал ее так, как сделал.

Слишком много людей опираются на одиночек, чтобы легко решать проблемы, а не находить реальные решения проблемы. В этом случае я проведу параллель с UIScreen или UIDevice на устройствах iOS:

UIScreen имеет mainScreen синглтон, который относится к экрану на вашем iPhone, iPad, что угодно. На этих устройствах может быть только один главный экран.

И наоборот, в UIDevice есть метод класса currentDevice, который достигает той же цели: может быть только одно устройство.

...