По сути следуйте по ссылке Джин сверху на dev блог и примите эти рекомендации.Вы собираетесь создать одноэлементный класс, который лениво загружает подходящий класс для соответствующего уровня API устройства, на котором он работает.Функции, которые недоступны в версии, должны обрабатывать этот вариант использования.
public abstract class StaticAct {
protected static StaticAct INSTANCE = null;
public static StaticAct getInstance() {
final int sdkVersion = Integer.parseInt(Build.VERSION.SDK);
if(INSTANCE==null)
if(sdkVersion < Build.VERSION_CODES.DONUT){
INSTANCE = new CupcakeStaticAct();
}else if (sdkVersion < Build.VERSION_CODES.ECLAIR){
INSTANCE = new DonutStaticAct();
}else if(sdkVersion < Build.VERSION_CODES.FROYO){
INSTANCE = new EclairStaticAct();
}else if(sdkVersion < Build.VERSION_CODES.GINGERBREAD){
INSTANCE = new FroyoStaticAct();
}else{
INSTANCE = new GingerbreadStaticAct();
}
return INSTANCE;
}
// Private constructor prevents instantiation from other classes
protected StaticAct() {}
}
В этом абстрактном классе будут некоторые абстрактные методы, которые он определяет, например,
public abstract boolean enableStrictMode();
Для каждого классауровень API.РЕДАКТИРОВАТЬ: это все частные классы, определенные внутри файла StaticAct.java.Это позволяет ленивой загрузке работать правильно и предотвращать создание экземпляров из других классов.
/*
* API Level 3
*/
private static class CupcakeStaticAct extends StaticAct
Базовый класс (расширяющий StaticAct) должен реализовывать все методы, определенные в StaticAct.Если метод недоступен для этого уровня API, обработайте этот случай, сгенерируйте ошибку или верните false (или полностью ее игнорируйте).
@Override
public void enableStrictMode() {
//unavilable in cupcake, do nothing
}
Поскольку ваши классы увеличиваются на уровне API, им нужно только реализовать методы,изменились по сравнению с предыдущими версиями.Таким образом, API мультитач стали доступны в 2.0, строгий режим в 2.3 и т. Д.