2016-11-06 2 views
1

Я хотел бы понять разницу между шаблоном наблюдателя и наиболее распространенной проблемой производителя/потребителя, поскольку обе требуют синхронизации, чтобы изменения были доступны, и как я могу реализовать оба (если они разные)Разница между шаблоном производителя/потребителя и шаблоном наблюдателя

ответ

3

Разница между ними - это характер синхронизации.

В случае шаблона наблюдателя при изменении интереса к наблюдаемому объекту все наблюдатели незамедлительно уведомляются. Таким образом, для шаблона требуется немедленная синхронизация изменений. На самом деле шаблоны наблюдателей не требуют другого потока. Поток, который меняет наблюдаемый объект, может уведомить всех зарегистрированных наблюдателей.

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

Что касается реализации, вы можете ознакомиться с статьями Википедии: Observer Pattern и Producer-Consumer Problem.

+0

Спасибо за объяснение, у меня есть вопрос: - Можно ли применять оба понятия в одной программе java? –

+0

Почему бы и нет? Приложения реального мира настолько велики, что могут применять десятки таких концепций в одной программе. – taskinoor

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