2010-04-05 4 views
6

Я знаю, что такое Singleton или Monostate и как их реализовать. Хотя я могу видеть много применений для Singleton, я не могу представить ситуацию, когда я хочу, чтобы пользователь создал столько экземпляров моего класса, хотя на самом деле только один действительно существует за кулисами.В каких ситуациях модель шаблонов Monostate?

Может кто-нибудь мне помочь? Я знаю, что по нескольким причинам человек должен держаться подальше от обоих шаблонов, но теоретически, какие проблемы делают модель Monostate?

Благодаря

+0

Никогда не слышал картины monostate. Однако я полагаю, что он может использоваться для общего ресурса, такого как Singleton. Ссылка, приведенная ниже, может служить хорошим примером, избегая более сложного шаблона, такого как Observer: http://www.devx.com/getHelpOn/10MinuteSolution/16361 –

+1

См. Также http://c2.com/cgi/wiki ? MonostatePattern – trashgod

ответ

3

Monostate, в моих глазах, не шаблон, который вы, вероятно, реализовать на уровне приложений, но может быть полезно на уровне инфраструктуры. This comment on Alex Martelli's presentation of the pattern in Python - иллюстративный пример.

Рассмотрите сценарий удаленного доступа DCOM или .NET, где у нас есть объект на сервере, представляющий Person с именем Bob. Боб не одинокий, потому что Боб не единственный Человек. Но несколько клиентов могут разговаривать с Бобом одновременно. В каждом случае клиент не имеет прямой ссылки на Боба (который находится в другом адресном пространстве или на другом компьютере), но вместо этого имеет прокси-объект. И этот прокси-объект является локальным для этого конкретного клиента.

Таким образом, у нас есть несколько прокси-объектов, каждый из которых имеет различный идентификатор, но каждое проксирование состояния и поведения Боба объекта сервера - и, следовательно, совместного использования состояния и поведения. Если клиент Алиса обновляет состояние Боба (вызывая метод на своем прокси-объекте), тогда клиент Кэрол увидит изменения в поведении Боба (когда она называет методы на своем прокси-объекте). Прокси-объекты Алисы и Кэрол не имеют одинаковый идентификатор объекта, но do имеют одинаковое состояние и поведение: оба представляют собой Боб. Два прокси-сервера демонстрируют шаблон Monostate.

(The whole thread стоит читать для более детального обсуждения, но выше для меня было где-то щелкнуло в фокусе.)

+0

Только тот ответ, который я искал! –

Смежные вопросы