首先看Opreration这个类
package com.dyk.operate; public class Operation { private double number1; private 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 double getResult() { double result = 0; return result; } }可以看到,在Operation这个类中定义了一个getResult()方法和number1和number2两个属性。没什么太多可说的。接下来看下它的子类。OperationAdd和OperationSub。
package com.dyk.operate.impl; import com.dyk.operate.Operation; public class OperationAdd extends Operation { @Override public double getResult() { double result = 0; result = super.getNumber1() + super.getNumber2(); return result ; } } public class OperationSub extends Operation { @Override public double getResult() { double result = 0; result = super.getNumber1() - super.getNumber2(); return result ; } }可以看到OperationAdd和OperationSub都重写了Operation类的getResult()方法。在getResult()方法中执行相应的加减操作。准备工作到此完成,接下来就可以着手写我们的工厂类了
package com.dyk.factory; import com.dyk.operate.Operation; import com.dyk.operate.impl.OperationAdd; import com.dyk.operate.impl.OperationSub; public class OperationFactory { public static Operation createOperationBySimpleFactory(String operation){ Operation oper = null; switch (operation) { case "+": oper = new OperationAdd(); System.out.println("加法运算"); break; case "-": oper = new OperationSub(); System.out.println("减法运算"); break; default: break; } return oper; } }
private static void simpleFactory() { Operation oper = null; oper = OperationFactory.createOperationBySimpleFactory( "+"); oper.setNumber1(1.5d); oper.setNumber2(1.2d); System. out.println("运算结果:" + oper.getResult()); oper = OperationFactory.createOperationBySimpleFactory( "-"); oper.setNumber1(1.5d); oper.setNumber2(1.2d); System. out.println("运算结果:" + oper.getResult()); }
package com.dyk.factory; import com.dyk.operate.Operation; public interface IFactory { Operation createOperationByFactory(); }
package com.dyk.factory.impl; import com.dyk.factory.IFactory; import com.dyk.operate.Operation; import com.dyk.operate.impl.OperationAdd; public class AddFactory implements IFactory { @Override public Operation createOperationByFactory() { return new OperationAdd(); } } package com.dyk.factory.impl; import com.dyk.factory.IFactory; import com.dyk.operate.Operation; import com.dyk.operate.impl.OperationAdd; public class AddFactory implements IFactory { @Override public Operation createOperationByFactory() { return new OperationAdd(); } }在AddFactory和SubFactory的createOperationByFactory()方法中分别new出了一个Operation的子类对象。在Test类中实现如下
private static void factory() { Operation mOperation = null ; IFactory iFactory = null; iFactory = new AddFactory(); mOperation = iFactory.createOperationByFactory(); mOperation.setNumber1(1.5d); mOperation.setNumber2(1.2d); System. out.println("运算结果:" + mOperation.getResult()); iFactory = new SubFactory(); mOperation = iFactory.createOperationByFactory(); mOperation.setNumber1(1.5d); mOperation.setNumber2(1.2d); System. out.println("运算结果:" + mOperation.getResult()); }
package com.dyk.factory; import com.dyk.operate.Operation; public class ReflectFactory { public static Operation createOperationByReflectFactory(String classPath ){ Operation oper = null; try { oper = (Operation) Class.forName(classPath).newInstance(); } catch (InstantiationException e ) { e.printStackTrace(); } catch (IllegalAccessException e ) { e.printStackTrace(); } catch (ClassNotFoundException e ) { try { throw new Exception("opration is not instanceof Operation"); } catch (Exception e1 ) { e1.printStackTrace(); } e.printStackTrace(); } return oper ; } }Test测试方法如下
private static void reflectFactory() { Operation mOperation =null ; String classPath = "com.dyk.operate.impl.OperationAdd" ; mOperation = ReflectFactory.createOperationByReflectFactory( classPath); mOperation.setNumber1(1.5d); mOperation.setNumber2(1.2d); System. out.println("运算结果:" + mOperation.getResult()); }运算结果如右: