У меня есть концептуальная проблема с правильной реализацией кода, которая, по-видимому, требует множественного наследования, что не было бы проблемой во многих языках ОО, но поскольку проект для Android, такого понятия, как множественное, не существует extends
.
У меня есть куча деятельности, полученная от различных базовых классов, таких как простой Activity
, TabActivity
, ListActivity
, ExpandableListActivity
и т.д. Кроме того, у меня есть некоторые фрагменты кода , которые мне нужно место в onStart
, onStop
, onSaveInstanceState
, onRestoreInstanceState
и другие стандартные обработчик событий во всех видах деятельности.
Если бы у меня был один базовый класс для всех действий, я бы поместил код в специальный промежуточный производный класс, а затем создал бы все действия, расширяющие его. К сожалению, это не так, потому что есть несколько базовых классов. Но размещение одних и тех же частей кода в нескольких промежуточных классах - не лучший способ, имхо.
Другой подход может состоять в том, чтобы создать вспомогательный объект и делегировать все вызовы вышеупомянутых событий помощнику. Но это требует включения вспомогательного объекта и переопределения всех обработчиков во всех промежуточных классах. Таким образом, здесь нет большой разницы с первым подходом - все еще много дубликатов кода.
Если бы подобная ситуация произошла в Windows, я бы создал подкласс базового класса (что-то, что «соответствует» Activity
классу в Android) и перехватывал там соответствующие сообщения (в одном месте).
Что для этого можно сделать в Java / Android? Я знаю, что есть интересные инструменты, такие как инструментарий Java ( с некоторыми реальными примерами ), но я не гуру Java и не уверен, стоит ли пытаться в этом конкретном случае.
Если я пропустил некоторые другие достойные решения, пожалуйста, упомяните их.
ОБНОВИТЬ:
Для тех, кто может быть заинтересован в решении той же проблемы в Android, я нашел простой обходной путь. Существует класс Application , который предоставляет, помимо прочего, интерфейс ActivityLifecycleCallbacks . Это делает именно то, что мне нужно, позволяя нам перехватывать и добавлять некоторую ценность в важные события для всех видов деятельности. Единственным недостатком этого метода является то, что он доступен начиная с уровня API 14, чего во многих случаях недостаточно (поддержка API уровня 10 является типичным требованием сегодня).
decordator pattern
. Это последнее средство, которое хотя на самом деле демонстрирует то, что я бы предпочел избежать - дублирование кода. Я приму ваш ответ, если нет других интересных идей. Могу ли я использовать дженерики для обобщения кода «промежуточных звеньев»?