abstract public interface Convertible {
void setMetric(boolean b);
boolean isMetric();
double getValue();
void setValue(double d);
String getUnits();
}
public abstract class MetricHandler
implements Convertible {
private boolean metric = true;
private String eUnits;
private String mUnits;
MetricHandler(String _mUnits,
String _eUnits) {
eUnits = _eUnits;
mUnits = _mUnits;
}
public boolean isMetric() {
return metric;
}
public void setMetric(boolean b) {
metric = b;
}
public String getUnits() {
if (isMetric()) {
return mUnits;
}
return eUnits;
}
}
interface MetricFcn {
double m2e(double d);
double e2m(double d);
}
abstract class ValueHandler extends
MetricHandler
implements MetricFcn {
double evalue = 0;
double mvalue = 0;
ValueHandler(
String _eUnits,
String _mUnits){
super(_eUnits,_mUnits);
}
public double getValue() {
return isMetric()?mvalue:evalue;
}
public void setValue(double d) {
if (isMetric() ) {
mvalue = d;
evalue = m2e(d);
return;
}
evalue = d;
mvalue = e2m(d);
}
}
public class Meters2Yards
extends ValueHandler {
Meters2Yards() {
super("meters","yards");
}
public double m2e(double d) {
return d / 1.1;
}
public double e2m(double d) {
return d * 1.1;
}
}
public class Liters2Gallons
extends ValueHandler {
Liters2Gallons() {
super("liters","gallons");
}
public double m2e(double d) {
return d / 3.78;
}
public double e2m(double d) {
return d * 3.78;
}
}
public class Test {
Liters2Gallons l2g = new Liters2Gallons();
Test() {
l2g.setMetric(true);
l2g.setValue(10);
System.out.println(
l2g.getValue()+
" "+ l2g.getUnits());
l2g.setMetric(false);
System.out.println(
l2g.getValue()+
" "+ l2g.getUnits());
}
public static void main(String args[]) {
Test t = new Test();
}
}
|