首页 > 代码库 > 简单工厂模式
简单工厂模式
简单工厂模式(Factory Method):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
package gof23; public class SimpleFactoryTest { public static void main(String[] args) { Operation oper = null; oper = OperationFactory.createOperate("+"); oper.numA = 2; oper.numB = 0; System.out.println(oper.getResult()); oper = OperationFactory.createOperate("-"); oper.numA = 2; oper.numB = 0; System.out.println(oper.getResult()); oper = OperationFactory.createOperate("*"); oper.numA = 2; oper.numB = 0; System.out.println(oper.getResult()); oper = OperationFactory.createOperate("/"); oper.numA = 2; oper.numB = 0; System.out.println(oper.getResult()); } } class OperationFactory { public static Operation createOperate(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; } } class Operation { protected double numA = 0; protected double numB = 0; 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 result = 0; return result; } } /* * 加法 */ class OperationAdd extends Operation{ @Override public double getResult() { double result = 0; result = numA + numB; return result; } } /* * 减法 */ class OperationSub extends Operation{ @Override public double getResult() { double result = 0; result = numA - numB; return result; } } /* * 乘法 */ class OperationMul extends Operation{ @Override public double getResult() { double result = 0; result = numA * numB; return result; } } /* * 除法 */ class OperationDiv extends Operation{ //注意除数不能为0 @Override public double getResult() { double result = 0; if(Math.abs(numB - 0.0) < 0.00000001) { System.out.println("除数不能为0"); return -1; } result = numA / numB; return result; } }
运行结果:
2.0 2.0 0.0 除数不能为0 -1.0
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。