Patron: responsibility, respect, result

Библиотека предназначена для того, чтобы дать пользователю возможность сконцентрироваться на разработке внутренней надёжной логики класса. Классы, использующие библиотеку, становятся ответственными за те результаты которые представляют и уважительно относятся к объектам с которыми взаимодействуют

Patron - это протокол для общения между объектами

В программе использующей Patron библиотеку есть объекты совместимые с SourceType - это источники данных, такие объекты могу отдавать данные. Есть объекты совместимые с GuestType - это потребители данных, они могут принять данные

Сценарий 1. Диалог

Объект А - источник данных, объект B - потребитель. Если объекту B нужны какие-то данные, то B обращается к А через метод A.value запрашивая данные. Когда А посчитает нужным, то А вернет B значение, вызывая B.give

Сценарий 2. Расширение

Объект А - источник данных запрашивающий случайное слово в интернете, объект B - источник изменяющий в базовом источнике первым символ на верхний регистр. Объект C - источник добавляющий в конец значения из базового источника знак восклицания "!". Объект D - потребитель результата, выводящий значение на экран

Получаем следующую композицию с = new C(new B(new A)), далее выражение c.value(new D()) - Выводит результат на экран

Сценарий 3. Постоянный потребитель

Объект А - источник данных, объект B - потребитель данных. Объект B может представиться как 'patron', благодаря этому, объект А в случае, если у него появится новое значение, будет знать что B нужно оповестить о новом значении