Хорошие задачки, в часности крайняя про паттерн Прокси. Советую осознать разницу между паттернами Proxy и Декоратор, уж больно они похожи, но решают разные проблемы...
на этом примере мы хорошо видим, что Прокси имеет конструктор идентичный конструктору объекта, которого он подменяет. таким образом происходит незаметная подмена.
а Декоратор принимает в конструкторе объект, который оборачивает/дополняет функционалом.
в этом явное отличие.
Задача "Кеширующий Proxy" оказалась весьма простая и очень полезная (показывает интересный прием как ускорить работу программы).
Приступал к решению со скрипом, опасаясь, что веселье растянется на пару вечеров. Сделал за полчаса. Решивших всего 1222 - остальные похоже просто испугались.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ