我正在重构项目中的一些代码,同时阅读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");
}
}
}
答案 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。
这样您就不必使代码与文件列表保持同步。