Schéma de concpetion Abstract Factory Exemple Sylvain Giroux
Problème Vos clients sont américains et français. les américains tiennent mordicus à travailler avec des mesures en système impérial les français tiennent absolument au système métrique. Implémentez un programme qui garantisse aux utilisateurs de ne travailler que dans un seul des deux systèmes de mesure. Le système de mesure à utiliser sera spécifié dans un fichier de propriétés.
L’interface abstraite sur la famille de produits public interface Measure { String getUnits(); String getUnits(); Number getValue(); Number getValue(); Measure add(Measure qty); Measure add(Measure qty); Measure substract(Measure qty); Measure substract(Measure qty); Measure convertir(String units); Measure convertir(String units);}
La famille métrique public interface MeasureMetric extends Measure { public static String MILLILITRES = "ml"; public static String MILLILITRES = "ml"; public static String LITRES = "l"; public static String LITRES = "l"; public static String MILLIGRAMMES = "mg"; public static String MILLIGRAMMES = "mg"; public static String GRAMMES = "g"; public static String GRAMMES = "g";}
public class MeasureMetricImpl implements MeasureMetric { public MeasureMetricImpl(Number n, String u) { public MeasureMetricImpl(Number n, String u) { } public String getUnits() {... public String getUnits() {... } public Number getValue() {... public Number getValue() {... } public Measure add(Measure qty) { public Measure add(Measure qty) { Measure m2 = qty.convertir(this.getUnits()); Measure m2 = qty.convertir(this.getUnits()); return new MeasureMetricImpl( return new MeasureMetricImpl( this.getValue(). + m2.getValue(), this.getValue(). + m2.getValue(), this.getUnits()); this.getUnits()); } public Measure substract(Measure qty) { public Measure substract(Measure qty) { }}
public class MeasureFactory { public Measure getVolume(Number n, String u) { ProgramProperties props = ProgramProperties.getInstance(); ProgramProperties props = ProgramProperties.getInstance(); if (props. getProperty("measure.system") == "us") if (props. getProperty("measure.system") == "us") return new MeasureUSImpl(n, u); return new MeasureUSImpl(n, u); return new MeasureMetricImpl(n,u); return new MeasureMetricImpl(n,u); } public String getVolumeDefaultUnit() { public String getVolumeDefaultUnit() { return null;} return null;} public Measure getWeight(Number n, String u) public Measure getWeight(Number n, String u) {return null;} {return null;} public String getWeightDefaultUnit(){return null;} public String getWeightDefaultUnit(){return null;}}