Какова цель ContextWrapper (наличие прокси для контекста)?

#android #android-context #proxy-pattern

#Android #android-context #прокси-шаблон

Вопрос:

Согласно документации Android, ContextWrapper — это «[p] расширяющая реализация Context , которая просто делегирует все свои вызовы другому Context . Может быть подклассом для изменения поведения без изменения оригинала Context

У меня нет большого опыта работы с шаблоном прокси. Как он используется здесь и с какой целью? Другими словами, почему его косвенные подклассы, такие как Activity и Service, не классифицируют его напрямую?

Комментарии:

1. Небольшая поправка: Service и Application классы непосредственно создают подкласс ContextWrapper . Только Activity является косвенным подклассом ContextWrapper (через ContextThemeWrapper ). Редактировать: уф, только что понял, что вы говорили о Context , а не ContextWrapper там.

Ответ №1:

ЧТОБЫ иметь возможность переопределять некоторые из его поведений. Например, у вас был бы базовый контекст для приложения, затем вы поместили бы его в ContextWrapper и переопределили объект Resource для его оформления (что на самом деле и делает Android).

Что касается того, почему вы сделали бы это, а не просто подкласс — чтобы не создавать два, возможно, очень тяжелых объекта. Вы также могли бы совместно использовать переменные между ними, но это увеличивает вероятность утечек памяти. Также возможно, что создание объекта обходится дорого, но если это уже сделано, вы можете избежать этого с помощью проксирования.