[stratégie] Interface/classe-abstraite avec méthodes static
Bonjour !
Problème :
Dans mon application j'utilise une classe statique, c'est à dire qu'elle ne contient que méthodes et attributs statiques.
Depuis mon application à évoluée, et je me rend compte de la nécessité de divisée cette classe en une interface et son implémentation.
Cependant, je voudrais conserver l'appel à des méthodes statiques et c'est ça mon problème, car une méthode abstraite ne peut pas être statique.
Solution trouvée :
Pour resoudre cela j'ai trouvé une solution, j'ai divisé ma classe en deux classes :
Une classe abstraite contenant :
:arrow: Des méthodes abstraites.
:arrow: Des méthodes statiques faisant appel aux méthodes abstraites correspondantes.
:arrow: Un attribut statique, instance de cette classe, utilisé pour l'appel aux méthodes abstraites et instancié avec la classe d'implémentation choisie.
Une classe d'implémentation implémentant les méthodes abtraites de la classe précèdement citée.
Questions sur la solution :
Cette solution vous parait-elle propre ?
Y a -t-il une meilleur façon de faire ?
Merci d'avance !
Re: [stratégie] Interface/classe-abstraite avec méthodes sta
[quote="Jaxofun"]Bonjour !
Problème :
Dans mon application j'utilise une classe statique, c'est à dire qu'elle ne contient que méthodes et attributs statiques.
Depuis mon application à évoluée, et je me rend compte de la nécessité de divisée cette classe en une interface et son implémentation.
Cependant, je voudrais conserver l'appel à des méthodes statiques et c'est ça mon problème, car une méthode abstraite ne peut pas être statique.
Solution trouvée :
Pour resoudre cela j'ai trouvé une solution, j'ai divisé ma classe en deux classes :
tu peu utiliser un singleton pattern + interface
genre
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
public interface EuroFrancsConverter
{
public double francToEuro(double franc);
public double euroToFranc(double euro);
}
public class EuroFrancManager
{
private static EuroFrancsConverter instance = new DefaultEuroFrancsConverter();
private static EuroFrancsConverter getInstance()
{ return instance; }
private static void setInstance(EuroFrancsConverter converter)
{ instance = converter; }
}
public class DefaultEuroFrancsConverter implements EuroFrancsConverter
{
public double francToEuro(double franc)
{ return franc / 6.55957; }
public double euroToFranc(double euro)
{ return euro * 6.55957; }
} |
tu peu ensuite utiliser simplement comme ceci
Code:
1 2
|
EuroFrancManager.getInstance().francToEuro(3.6); |