У меня есть общая задача, которую я выполняю с некоторыми действиями - загрузка данных с последующим их отображением. У меня есть часть для скачивания; это, конечно, немного сложно из-за возможности изменения пользователем ориентации или отмены Активности до завершения загрузки, но код есть. В этих случаях достаточно обработки кода, так что мне не нужно копировать / вставлять его в каждое имеющееся у меня действие, поэтому я подумал о создании самого абстрактного подкласса такого действия, чтобы он обрабатывал одну фоновую загрузку, которая затем запускает метод который заполняет страницу данными.
Это все работает. Проблема в том, что из-за одиночного наследования я вынужден воссоздать точно такой же класс для любого другого типа Activity - например, я использую Activity, ListActivity и MapActivity. Чтобы использовать одну и ту же технику для всех трех, требуются три повторяющихся класса, за исключением того, что каждый расширяет свою деятельность.
Существует ли шаблон проектирования, который может сократить дублирование кода? В настоящее время я уже сохранил много дубликатов, но мне больно видеть один и тот же код в трех классах, просто чтобы каждый из них был подклассом своего типа Activity.
Редактировать: Поскольку мне кажется, мне нужно быть немного более конкретным ...
Предположим, я пытаюсь решить проблему фоновой загрузки AsyncTask во время изменения ориентации. Решение, которое я имею сейчас, состоит в том, чтобы использовать обратные вызовы; у меня есть менеджер загрузок, который запускает эти загрузки, а затем я прикрепляю к нему активность. Когда ориентация меняется, действие уничтожается, а затем воссоздается; во время этого процесса я отсоединяю обратный вызов старой активности, а затем присоединяю новый обратный вызов от новой активности.
Изменения в ориентации являются распространенной проблемой, и в нескольких операциях я запускаю операцию с видом прогресса, пока загружаются данные. То, что я пытаюсь решить, - это не повторять эту логику обработки ориентации десять раз; Моим первоначальным решением было создание подкласса Activity, но потом я получил проблему выше.