简单工厂模式:不符合 开放-封闭 原则,对每一次扩展时都要更改工厂类,这就是对修改开放了,当然不符合 开放-封闭 原则。
Operator.java 类:
package sampleFactory; import java.math.BigDecimal; public abstract class Operator { BigDecimal numA; BigDecimal numB; BigDecimal result ; public abstract BigDecimal getResult(); }
OperatorAdd.java类
package sampleFactory; import java.math.BigDecimal; public class OperatorAdd extends Operator { @Override public BigDecimal getResult() { System.out.println(numA); System.out.println(numB); result = numA.add(numB); return result; } }
OperatorDevide.java类
package sampleFactory; import java.math.BigDecimal; public class OperatorDevide extends Operator { @Override public BigDecimal getResult() { result = numA.divide(numB); return result; } }
OperatorMul.java类
package sampleFactory; import java.math.BigDecimal; public class OperatorMul extends Operator { @Override public BigDecimal getResult() { result = numA.multiply(numB); return result; } }
OperatorSub.java类
package sampleFactory; import java.math.BigDecimal; public class OperatorSub extends Operator { @Override public BigDecimal getResult() { result = numA.subtract(numB); return result; } }
SampleFactory.java类
package sampleFactory; public class SampleFactory { Operator op ; public Operator createOperator(String operator){ switch(operator){ case "+": op = new OperatorAdd(); break; case "-": op = new OperatorSub(); break; case "*": op = new OperatorMul(); break; case "/": op = new OperatorDevide(); } return op ; } }
Business.java类
package sampleFactory; import java.math.BigDecimal; import java.util.Scanner; public class Business { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入数字A:"); BigDecimal numA = sc.nextBigDecimal(); System.out.println("请输入操作符:"); String operator = sc.next(); System.out.println("请输入数字B:"); BigDecimal numB = sc.nextBigDecimal(); SampleFactory sf = new SampleFactory(); Operator op = sf.createOperator(operator); op.numA = numA ; op.numB = numB ; BigDecimal result = op.getResult(); System.out.println("运算结果:"+result); sc.close(); } }