许多 class 具有相同的方法,或者一个 class 具有该方法并被其他 class 继承?

Many classes that have the same method or one class that has the method and is inherited by the other classes?

我正在开发一个 Android 应用程序,自然我有很多 class 用于在屏幕上布置视图的元素。现在我在这里有了这个简单的方法 DpToPx(int),我在 Whosebug 的其他地方看到过:

private int dpToPx(int dp){
   DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
   return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
}

我用它来提供跨不同屏幕分辨率设备的某种布局一致性。哪种做法更好 -

要在布局视图的每个 class 中使用此方法,或者使其成为所有 class 实现的接口?

特别是在内存和对象保留方面(AFAIK 有时在 class 中重复相同的方法比创建一个单独的对象更好)。但是当超过两个classes?

我可能会成功:

  1. 实用程序 class 中的一个静态实用程序方法,您的视图将其传递 context,或

  2. 实用程序的实例方法class您的视图实例化

例如

class LayoutUtils {
    public static int dpToPx(Context context, int dp){
        DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
    }
}

class LayoutUtils {
    private Context context;

    LayoutUtils(context context) {
        this.context = context;
    }

    public int dpToPx(int dp){
        DisplayMetrics displayMetrics = this.context.getResources().getDisplayMetrics();
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
    }
}

在后一种情况下,每个视图都会有一个 LayoutUtils 实例。

实例方法更容易模拟测试(当然,您需要调整上述内容以添加依赖注入而不是直接构造函数)。

我在一个包 "helpers" 中创建了一个 class "Utils" 并在其中放置了我认为将在所有应用程序中使用的所有方法和变量。

那么调用起来就很简单了 Utils.dpToPx(10); 不要忘记导入 class :)

这是我的方法,不知道是不是最好的。

一点代码

public class Utils {

  public static int dp2px(int dp, Context context) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
            context.getResources().getDisplayMetrics());
} 

}