好处:
每个功能都有自己的类,新增新的运算或移除某个运算时不需要改全部的代码
缺点:
原理:通过客户选择来确定实例化哪个对象
例
客户端:
public class Text {
public static void main(String[] args) {
Operation operation= SelOperator.getIns('+');
operation.setParameters(5, 10);
System.out.println(operation.getResult());
}
}
工厂类
import javax.management.RuntimeErrorException;
public class SelOperator {
public static Operation getIns(char str){
Operation opera=null;
switch (str){//更具用户的选择来实例化对象
case '+':opera= new OperatorAdd();break;
case '-':opera= new OperatorSubtract();break;
case '*':opera= new OperatorMultiplication();break;
case '/':opera= new OperatorDivision();break;
}
return opera;
}
}
加减乘除类
class OperatorAdd extends Operation{
public double getResult() {
return OperationA+OperationB;
}
}
class OperatorSubtract extends Operation{
public double getResult() {
return OperationA-OperationB;
}
}
class OperatorMultiplication extends Operation{
public double getResult() {
return OperationA*OperationB;
}
}
class OperatorDivision extends Operation{
public double getResult() {
if(OperationB!=0)
return OperationA/OperationB;
else System.out.println("不能除0");
throw new RuntimeErrorException(null, "除0了");
}
}
运算的抽象类
public abstract class Operation {
protected double OperationA;
protected double OperationB;
public void setParameters(double OperationA,double OperationB){
this.OperationA=OperationA;
this.OperationB=OperationB;
}
public abstract double getResult();
}