Преобразование условных выражений в полиморфизм - PullRequest
0 голосов
/ 03 июня 2011

Я рефакторинг некоторого кода в проекте во время чтения Объектно-ориентированный Шаблоны реинжиниринга , в частности, раздел «Преобразование условных выражений в полиморфизм». Таким образом, текущая база кода имеет константу, которая ссылается на фабричный класс, который возвращает растровое изображение на основе displayWidth & displayHeight. Чтобы достичь этого, мне нужно создать два новых класса, каждый из которых представляет разные screenWidth и screenHeight? Я немного заблудился относительно того, что является лучшим методом достижения полиморфизма в этом случае.

public static final Bitmap TICKER_BACKGROUND_IMAGE = ImageFactory.getFooterBitmap();

Метод в ImageFactory -

открытый класс ImageFactory {

private static int displayWidth;
private static int displayHeight;

static {
    displayWidth = Display.getWidth();
    displayHeight = Display.getHeight();
}

public static Bitmap getFooterBitmap(){ 

    if(displayWidth == 360 && displayHeight == 480){
        return Bitmap.getBitmapResource("360x480/footer_bg.png");
    }
    else {
        return Bitmap.getBitmapResource("320x240/footer_bg.png");
    }

}

}

Ответы [ 2 ]

2 голосов
/ 03 июня 2011

Я бы взял все его аргументы в качестве параметров. Не используйте статические переменные в качестве аргумента, если можете.

public static Bitmap getFooterBitmap(int width, int height){ 
    String filename = width == 360 && height == 480 ? "360x480" : "320x240";
    return Bitmap.getBitmapResource(filename+"/footer_bp.png);
}

Использование полиморфизма - хорошая идея, но не лучшее решение в любой ситуации.


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

public static Bitmap getFooterBitmap(int width, int height){ 
    Bitmap bm = Bitmap.getBitmapResource(width+"x"+height+"/footer_bp.png);
    if (bm == null)
       bm = Bitmap.getBitmapResource("320x240/footer_bp.png);
    return bm;
}
1 голос
/ 03 июня 2011

Не указывайте ширину в коде, вместо этого получите потенциальное имя файла из размера дисплея.

String filename = width + "x" + height

Теперь ищите файл этих конкретных размеров. Если он существует, используйте его, иначе вернитесь к 320x240.

Таким образом, вам не нужно синхронизировать код со списком файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...