
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());
}
}
}
本文介绍了一个使用简单工厂模式实现的计算器程序。该程序通过抽象基类Operation定义了加、减、乘、除四种运算,并利用OperationFactory进行运算类型的实例化。客户端代码展示了如何创建除法操作并获取结果。
1617

被折叠的 条评论
为什么被折叠?



