Java 将条件句转换为多态性
我正在重构project中的一些代码,同时专门阅读“将条件转换为多态性”一节。因此,当前代码基具有引用工厂类的常量,该工厂类返回基于displayWidth&displayHeight的位图。要实现这一点,我需要创建两个新类,每个类代表不同的屏幕宽度和屏幕高度吗?在这种情况下,实现多态性的最佳方法是什么,我有点不知所措Java 将条件句转换为多态性,java,oop,polymorphism,Java,Oop,Polymorphism,我正在重构project中的一些代码,同时专门阅读“将条件转换为多态性”一节。因此,当前代码基具有引用工厂类的常量,该工厂类返回基于displayWidth&displayHeight的位图。要实现这一点,我需要创建两个新类,每个类代表不同的屏幕宽度和屏幕高度吗?在这种情况下,实现多态性的最佳方法是什么,我有点不知所措 public static final Bitmap TICKER_BACKGROUND_IMAGE = ImageFactory.getFooterBitmap(); Ima
public static final Bitmap TICKER_BACKGROUND_IMAGE = ImageFactory.getFooterBitmap();
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");
}
}
}我会将所有it参数作为参数。如果可以的话,不要使用静态变量作为参数
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;
}
我会将所有it参数作为参数。如果可以的话,不要使用静态变量作为参数
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;
}
不要在代码中引用宽度,而是从显示大小获取可能的文件名
String filename = width + "x" + height
现在查找这些特定维度的文件。如果存在,请使用它,否则返回320x240
这样,您就不必使代码与文件列表保持同步。不要参考代码中的宽度,而是从显示大小获取可能的文件名
String filename = width + "x" + height
现在查找这些特定维度的文件。如果存在,请使用它,否则返回320x240
这样,您就不必使代码与文件列表保持同步。在这种情况下,我不认为我可以使用三元运算符,因为随着时间的推移,条件列表必然会增加到两个以上,我应该在问题中提到这一点。+1表示“不是所有情况下的最佳解决方案”-如果你一意孤行地用多态性替换所有条件代码,你很可能会使代码更难维护,而不是更少。@user-在最初的示例中,工厂方法不接受任何参数。这意味着“displayWidth”和“displayHeight”变量必须是FactoryClass的静态变量。在这种情况下,如果两个线程试图同时使用工厂方法,您将遇到并发问题。我想这就是Peter所指的。我不认为我可以在这种情况下使用三元运算符,因为随着时间的推移,条件列表必然会增加到两个以上,我应该在问题中提到这一点。+1表示“不是所有情况下的最佳解。”-如果你一意孤行地用多态性替换所有条件代码,你很可能会使代码更难维护,而不是更少。@user-在最初的示例中,工厂方法不接受任何参数。这意味着“displayWidth”和“displayHeight”变量必须是FactoryClass的静态变量。在这种情况下,如果两个线程试图同时使用工厂方法,您将遇到并发问题。我想这就是彼得所指的。