首先是Operation抽象类:
package yx.designpattern.simpleFactory; abstract class Operation { public double number1; public double number2; public double getNumber1() { return number1; } public void setNumber1(double number1) { this.number1 = number1; } public double getNumber2() { return number2; } public void setNumber2(double number2) { this.number2 = number2; } public abstract double getResult() throws Exception; }
package yx.designpattern.simpleFactory; public class OperationAdd extends Operation { @Override public double getResult() { return number1+number2; } }
package yx.designpattern.simpleFactory; public class OperationSub extends Operation { @Override public double getResult() { return number1-number2; } }
package yx.designpattern.simpleFactory; public class OperationMul extends Operation { @Override public double getResult() { return number1*number2; } }
继承Operation的除法类:OperationDiv:
package yx.designpattern.simpleFactory; public class OperationDiv extends Operation { @Override public double getResult() throws Exception { if(number2==0){ throw new Exception("除数不能为0"); } return number1/number2; } }
package yx.designpattern.simpleFactory; public class OperationFactory { public static Operation createOperation(char operation){ Operation oper=null; switch(operation){ case '+' : oper=new OperationAdd(); break; case '-': oper=new OperationSub(); break; case '*': oper=new OperationMul(); break; case '/': oper=new OperationDiv(); break; default: break; } return oper; } }
package yx.designpattern.simpleFactory; public class Test { public static void main(String[] args) { Operation oper; oper=OperationFactory.createOperation('/'); oper.number1=1; oper.number2=0; try { System.out.println(oper.getResult()); } catch (Exception e) { e.printStackTrace(); } } }