简单工厂模式概述
当我们需要根据不同的逻辑创建不同的运算逻辑,而这些逻辑又是同属一个种类下的,此时就可以将判断逻辑放入一个类中,由该类提供入口参数,调用不同的逻辑对象返回相对应的结果。
以下我们就以一个简单的计算器作为例子
不使用工厂模式的实现方法
public class TestMain { public static void main(String[] args) { String operator; int firNum = 1; int secNum = 2; //加法 operator = "+"; if("+".equals(operator)) { System.out.println(firNum + secNum); } else if("-".equals(operator)) { System.out.println(firNum - secNum); } else if("*".equals(operator)) { System.out.println(firNum * secNum); } else if("/".equals(operator)) { if(secNum != 0) System.out.println(firNum / secNum); } else { System.out.println(0); } } }
将每个实现逻辑都写在一个类中,使得该类的职责过于繁重,而这就导致需要修改的时候,可能因为一个小错误就会导致当前类的失效或不可用,所以我们将每个运算逻辑单独取出作为一个类,并将客户端的逻辑提取到一个单独类中进行管理。
定义每个运算逻辑(一个运算逻辑是一个类)
//运算方法接口 interface Operator { public int getResult(int number1, int number2); } //各个运算方法类 //加法 public class Addition implements Operator{ public int getResult(int number1, int number2) { return number1 + number2; } } //减法 public class Subtraction implements Operator{ public int getResult(int number1, int number2) { return number1 - number2; } } //乘法 public class Multiplication implements Operator { public int getResult(int number1, int number2) { return number1 * number2; } } //除法 public class Divition implements Operator { public int getResult(int number1, int number2) { return number1 / number2; } } //两个变量求平均数 public class AverageTwo implements Operator { public int getResult(int number1, int number2) { return (number1 + number2) / 2; } }
使用简单工厂模式的实现方法
//负责操作的工厂类 public class OperatorFactory { private String sign; private int number1; private int number2; private Operator operator = null; public void calculateParam(int number1, int number2, String sign) { this.number1 = number1; this.number2 = number2; this.sign = sign; } public int getResult() { if("+".equals(sign)) { //加法运算 operator = new Addition(); } else if("-".equals(sign)) { //减法运算 operator = new Subtraction(); } else if("*".equals(sign)) { //乘法运算 operator = new Multiplication(); } else if("/".equals(sign)) { //除法运算 operator = new Divition(); } else if("average".equals(sign)){ operator = new AverageTwo(); } else { return 0; } return operator.getResult(number1, number2); } } //测试函数 public class TestMain { public static void main(String[] args) { //此时客户端就只需要传入参与运算的值及操作方法即可 OperatorFactory operatorFactory = new OperatorFactory(); operatorFactory.calculateParam(5, 2, "average"); System.out.println(operatorFactory.getResult()); } }
总结
使用了简单工厂模式之后,在业务较为简单的情况下,当我们需要增加一个新的运算逻辑时,只需要再新增一个类,且在工厂类中增加对应的判断入口即可。
但是简单工厂模式违背了开闭原则,在我们新增运算逻辑时,仍需修改原类。这个问题在我们下次的工厂方法模式和抽象工厂模式中会有所优化。
才疏学浅,如文中有错误,感谢大家指出。
来源:https://www.cnblogs.com/runningRookie/p/11108777.html