封装:将加减乘除分别封装为单独的类
继承:加减乘除都继承Operation(运算类)
多态:加减乘除都重写Operation(运算类)的方法
package com.design.utils;
import org.junit.Test;
public class TestFactory {
/*
* 运算类
*/
class Operation {
protected double numA;
protected double numB;
public double getNumA() {
return numA;
}
public void setNumA(double numA) {
this.numA = numA;
}
public double getNumB() {
return numB;
}
public void setNumB(double numB) {
this.numB = numB;
}
public double GetResult(){
double res = 0;
return res;
}
}
/*
* 加
*/
class OperationAdd extends Operation {
public double GetResult(){
double res = super.numA + super.numB;
return res;
}
}
/*
* 减
*/
class OperationSub extends Operation {
public double GetResult(){
double res = super.numA - super.numB;
return res;
}
}
/*
* 乘
*/
class OperationMul extends Operation {
public double GetResult(){
double res = super.numA * super.numB;
return res;
}
}
/*
* 除
*/
class OperationDiv extends Operation {
public double GetResult(){
double res = 0;
try {
res = super.numA / super.numB;
} catch (Exception e) {
throw e;
}
return res;
}
}
/*
* 简单运算工厂
*/
class OperationFactory {
public Operation createOperation (String operate){
Operation oper = null;
switch (operate) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
/*
* 测试
*/
@Test
public void testOperFactory(){
OperationFactory opfa = new OperationFactory();
Operation oper = opfa.createOperation("+");
oper.numA = 2;
oper.numB = 3;
System.out.println("运算结果为:" + oper.GetResult());
}
}
注:此处没有处理精度问题关于精度的问题请看 精度计算
如要查看结合反射机制的简单工厂模式请查看 : http://blog.csdn.net/fateforever/article/details/78401166