将条件转换为多态

时间:2011-06-03 13:18:48

标签: java oop polymorphism

我正在重构项目中的一些代码,同时阅读Object-Oriented Reengineering Patterns,特别是关于“将条件转换为多态”的部分。因此,当前代码库具有常量,该常量引用工厂类,该工厂类基于displayWidth&amp ;;返回位图。 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 个答案:

答案 0 :(得分:2)

我会将所有参数作为参数。如果可以的话,不要使用静态变量作为参数。

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 :(得分:1)

不要在代码中引用宽度,而是从显示尺寸中获取潜在的文件名。

String filename = width + "x" + height

现在查找那些特定尺寸的文件。如果存在,请使用它,否则返回320x240。

这样您就不必使代码与文件列表保持同步。