package plp.gestion; import java.util.*; abstract class DeviseAbstraite implements Devise { private static final Map DEVISES = new Hashtable(); private final String nom; private double tauxDeChangeEnEuro; static { String [] nomsDevises = {"Franc", "Mark", "Pesetas", "Escudo", "Lire", "Euro"}; double [] tauxChange = {6.55957, 1.95583, 166.386, 200.482, 1936.270, 1.}; for (int i = 0; i < nomsDevises.length; ++i) { try { new DeviseTauxFixe(nomsDevises[i], tauxChange[i]); } catch (Exception e) { throw new Error(e.getMessage()); } } } /** * Cree une devise avec un premier taux de change en Euro. Il est * impossible de creer deux devises ayant le même nom. */ DeviseAbstraite (String nom, double tauxDeChangeEnEuro) throws DeviseExistanteException { try { Devise d = devise(nom); throw new DeviseExistanteException(d); } catch (DeviseInconnueException e) { this.nom = nom; this.tauxDeChangeEnEuro = tauxDeChangeEnEuro; DEVISES.put(nom,this); } } public String nom() { return this.nom; } public double tauxDeChangeEnEuro() { return this.tauxDeChangeEnEuro; } void changerTauxDeChangeEnEuro(double nouveauTaux) { tauxDeChangeEnEuro = nouveauTaux; } public double conversionEnEuro(double somme) { return somme / tauxDeChangeEnEuro; } public double conversion(Devise deviseCible, double somme) { return somme / tauxDeChangeEnEuro * deviseCible.tauxDeChangeEnEuro(); } public String toString() { return "Devise " + nom + " (taux de change en Euro = " + tauxDeChangeEnEuro + ")"; } public static Devise devise(String nom) throws DeviseInconnueException { Devise d = (Devise)DEVISES.get(nom); if (d != null) { return d; } throw new DeviseInconnueException(nom); } public static boolean existeDevise (String nom) { return DEVISES.containsKey(nom); } public static Devise [] devisesTraitees () { return (Devise []) DEVISES.values().toArray(); } }