简单工厂模式
1、简单工厂模式:
2、题目:请用java语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。
3、UML类图:
4、代码示例:
4.1、运算相关类:
Operation类:
import lombok.Data; /** * 操作类 */ @Data public class Operation { private double numberA; private double numberB; public double calculate() throws Exception{ double result = 0f; return result; } }
OperationAdd类:
/** * 加法类 */ public class OperationAdd extends Operation{ @Override public double calculate() { return super.getNumberA() + super.getNumberB(); } }
OperationSub类:
/** * 减法类 */ public class OperationSub extends Operation{ public double calculate() { return super.getNumberA() - super.getNumberB(); } }
OperationMul类:
/** * 乘法类 */ public class OperationMul extends Operation{ public double calculate(){ return super.getNumberA() * super.getNumberB(); } }
OperationDiv类:
/** * 除法类 */ public class OperationDiv extends Operation{ public double calculate() throws Exception{ if(super.getNumberB() == 0){ throw new Exception("除数不能为零!"); } return super.getNumberA() / super.getNumberB(); } }
4.2、简单工厂类:
OperationFactory类:
/** * 操作工厂类 */ public class OperationFactory { public static Operation creteOperate(String operate){ Operation operation = null; switch (operate){ case "+": operation = new OperationAdd(); break; case "-": operation = new OperationSub(); break; case "*": operation = new OperationMul(); break; case "/": operation = new OperationDiv(); break; } return operation; } }
4.3、简单工厂模式客户端:
/** * 简单工厂模式客户端 */ public class SimpleFactoryClient { public static void main(String[] args) throws Exception{ Operation operation = OperationFactory.creteOperate("*"); operation.setNumberA(3f); operation.setNumberB(4f); double result = operation.calculate(); System.out.println(result); } }
5、github:idemo-design-pattern