Java 将条件句转换为多态性

Java 将条件句转换为多态性,java,oop,polymorphism,Java,Oop,Polymorphism,我正在重构project中的一些代码,同时专门阅读“将条件转换为多态性”一节。因此,当前代码基具有引用工厂类的常量,该工厂类返回基于displayWidth&displayHeight的位图。要实现这一点,我需要创建两个新类,每个类代表不同的屏幕宽度和屏幕高度吗?在这种情况下,实现多态性的最佳方法是什么,我有点不知所措 public static final Bitmap TICKER_BACKGROUND_IMAGE = ImageFactory.getFooterBitmap(); Ima

我正在重构project中的一些代码,同时专门阅读“将条件转换为多态性”一节。因此,当前代码基具有引用工厂类的常量,该工厂类返回基于displayWidth&displayHeight的位图。要实现这一点,我需要创建两个新类,每个类代表不同的屏幕宽度和屏幕高度吗?在这种情况下,实现多态性的最佳方法是什么,我有点不知所措

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的静态变量。在这种情况下,如果两个线程试图同时使用工厂方法,您将遇到并发问题。我想这就是彼得所指的。