一个抽象操作类。
四个分别实现了加、减、乘、除的子操作类。
根据用户前台输入的操作符不同,利用工厂生成对应操作类对象,返回的是一个抽象的操作类。
利用多态调用操作类的计算结果方法(不同操作类的算法不一样)。
好处:各操作算法相隔离,互不影响。增加修改比较灵活。
抽象操作类型
package simpleFactory.calculator;
public abstract class Operation {
protected int numberA;
protected int numberB;
public int getNumberA() {
return numberA;
}
public void setNumberA(int numberA) {
this.numberA = numberA;
}
public int getNumberB() {
return numberB;
}
public void setNumberB(int numberB) {
this.numberB = numberB;
}
public abstract int getResult();
}
具体操作类
package simpleFactory.calculator;
public class OperationAdd extends Operation {
@Override
public int getResult() {
// TODO Auto-generated method stub
return this.getNumberA()+this.getNumberB();
}
}
操作符枚举
package simpleFactory.calculator;
public enum Operator {
ADD,SUB,MUL,DIV;
}
工厂类
package simpleFactory.calculator;
public class OperationFactory {
public static Operation createOperation(String operator){
switch(Operator.valueOf(operator)){
case ADD:
return new OperationAdd();
case SUB:
return new OperationSub();
case MUL:
return new OperationMul();
case DIV:
return new OperationDiv();
}
return null;
}
}
程序入口
package simpleFactory.calculator;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MainClass {
/**
* @param args
* @throws IOException
* @throws NumberFormatException
*/
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
while(true){
System.out.println("请输入第一位操作数字");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int numberA = Integer.parseInt(br.readLine());
System.out.println("请输入第二位操作数字");
int numberB = Integer.parseInt(br.readLine());
System.out.println("请输入操作符");
String operator = br.readLine();
Operation operation = OperationFactory.createOperation(operator);
operation.setNumberA(numberA);
operation.setNumberB(numberB);
System.out.println(operation.getResult());
System.out.println("是否继续Y/N");
String continueInput = br.readLine();
if(!continueInput.equals("Y")){
break;
}
}
}
}