J'ai une question par rapport à quelle est la bonne pratique et quelle est la mauvaise pratique et pourquoi ?

Supposons que je veuille réaliser une "bibliothèque" de fonctions (pour l'exemple on dira les fonctions addition et soustraction d'entiers).

Première solution :
Je réalise une classe qui contient mes deux fonctions déclarées en static :
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
public class MathUtils {
 
    public static int add(int a, int b) {
        return a+b;
    }
 
    public static int sub(int a, int b) {
        return a-b;
    }
}

Deuxième solution :
Je réalise un singleton pour qui contient mes deux fonctions :
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MathUtils {   
    private MathUtils() {}
 
    private static MathUtils INSTANCE = new MathUtils();
 
    public static MathUtils getInstance() {
        return INSTANCE;
    }
 
    public int add(int a, int b) {
        return a+b;
    }
 
    public int sub(int a, int b) {
        return a-b;
    }
}

Mon avis : J'ai l'impression que c'est deux implémentation sont équivalentes (à part peut-être en terme de performance et de compilation). Je trouve donc juste l'utilisation d'un singleton plus "lourd" (=plus de code pour résultat équivalent). J'utiliserais donc plutôt la première solution.

Mais je me pose quand même ces questions :
  1. Y a-t-il une différence de performance entre ces deux solutions ?
  2. ]Quelle est la bonne pratique (=la solution la plus "java") ?
  3. Pourquoi l'autre n'est pas une bonne pratique ? Dans quels cas alors l'utiliser ?
  4. Dans la première solution, faut-il déclarer la class comme static et/ou abstract ? et pourquoi ?
  5. Est-ce que j'ai tout faux est la bonne solution est aucune de celles proposées ?