Как вы указываете конкретную реализацию, которая будет использоваться для класса через ресурсы Android или Манифест

#android

#Android

Вопрос:

Предположим, у меня есть приложение для Android, которое может иметь различные навигационные возможности на основе конкретного класса, прикрепленного к приложению. Как указать конкретный класс. Ресурсы Android (R.java ) ничего не говорит об объектах. Я согласен, что я могу использовать classname в качестве строкового атрибута, а затем создавать экземпляр с помощью отражения.. но я не сторонник этого решения.

Каким другим способом я могу прикрепить конкретную реализацию к приложению Android, чтобы в зависимости от этого объекта приложение могло вести себя по-разному в разных сборках.

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

1. Что вы подразумеваете под навигационными возможностями?

2. Давайте предположим, что приложение может иметь разную навигацию на устройстве Android # 1 по сравнению с навигацией на устройстве Android # 2. Я ищу что-нибудь о том, как привязать Concrete Factory к приложению Android, когда приложение встроено в APK.

Ответ №1:

Рассмотрите возможность объявления интерфейса и попросите все конкретные классы реализовать интерфейс в виде подключаемых модулей. Затем вы можете либо вручную ввести одну строку кода, такую как

 Model model= new Model(new MyConcreteClassSpec());
  

где MyConcreteClassSpec реализует IMyModelSpec

Или вы можете передать целочисленное значение и вернуть конкретный класс, используя фабрику классов, как в:

 Model getInstanceModel(int i);
  

Использование int вместо enum делает фабрику классов расширяемой в будущем.

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

1. Я с нетерпением жду, как мы сможем привязать конкретную фабрику к приложению так, чтобы приложение даже не знало о существовании фабрики. (Например, то, что мы делаем с Swing L amp; F). getInstanceModel (int) позволит приложению узнать о существовании конкретного класса во время самой компиляции.

2. @jVenki Проблема в том, что я не до конца понимаю ваши требования, и я более компетентен в C #. Если вы пытаетесь загрузить класс во время выполнения на основе типа устройства, то я думаю, вы могли бы определить тип и вызвать getInstanceModel(DEVICE_TYPE). Конечно, вам нужно будет знать все типы и модели устройств во время компиляции. Если вы хотите загрузить неизвестный класс во время выполнения, рассмотрите возможность программирования интерфейса и загрузки класса во время выполнения с использованием динамического обнаружения и отражения.