#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).
Что касается того, почему вы сделали бы это, а не просто подкласс — чтобы не создавать два, возможно, очень тяжелых объекта. Вы также могли бы совместно использовать переменные между ними, но это увеличивает вероятность утечек памяти. Также возможно, что создание объекта обходится дорого, но если это уже сделано, вы можете избежать этого с помощью проксирования.