publicabstract class Operation {
private double numberA;
private double numberB;
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
public abstract double getResult() throwsException;
}
publicclass OperationAdd extends Operation {
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
publicclass OperationSub extends Operation {
@Override
public double getResult() {
return getNumberA() - getNumberB();
}
}
publicclass OperationMul extends Operation {
@Override
public double getResult() {
return getNumberA() * getNumberB();
}
}
publicclass OperationDiv extends Operation {
@Override
public double getResult() throws Exception{
if (getNumberB() == 0) {
throw new Exception("Divisoris zero.");
}
return getNumberA() / getNumberB();
}
}
publicclass OperationFactory {
public static OperationcreateOperation(String operator) {
Operation o = null;
switch (operator.toCharArray()[0]) {
case '+':
o = new OperationAdd();
break;
case '-':
o = new OperationSub();
break;
case '*':
o = new OperationMul();
break;
case '/':
o = new OperationDiv();
break;
default:
o = null;
}
return o;
}
}
/**
* Implement a calculator using encapsulation,inheritance and polymorphism.
*/
publicclass SimpleFactoryClient {
public static void main(String[] args) {
try {
Operation o =OperationFactory.createOperation("/");
o.setNumberA(4.2);
o.setNumberB(2);
System.out.println("Result:" + o.getResult());
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.toString());
}
}
}