动机
为什么会有简单工厂这个模式的呢?这概念是怎么引入的呢?没有简单工厂之前是如何开发的?遇到的主要问题是什么?
我们来考虑一个简单的软件应用场景,一个计算器系统可以提供多个运算(如加、减、乘、除等), 这些运算功能都源自同一个类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的运算,如果我们希望在使用这些运算时,不需要知道这些具体运算类的名字,只需要知道表示该运算类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的运算对象,此时,就可以使用简单工厂模式。
概述
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。
在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
学习思路
-
追根溯源:
-
门卫思想:是什么? 为什么? 怎么用?
代码实现
一、未使用简单工厂模式
运算类代码
public class Operation {
/**
* 运算逻辑
* @param numberA 运算数字A
* @param numberB 运算数字B
* @param operator 运算符
* @return
* @throws Exception
*/
public static double GetResult(double numberA,double numberB,String operator) throws Exception {
double result = 0d;
switch (operator){
case"+":
result =numberA+numberB;
break;
case"-":
result=numberA-numberB;
break;
case"*":
result=numberA*numberB;
break;
case"/":
if(numberB==0){
throw new Exception("除数不能为0!");
}
result=numberA/numberB;
break;
}
return result;
}
}
客户端代码
public static void main(String[] args) {
try{
double NumberA = 10;
double NumberB = 5;
String operate = "/";
double Result = 0;
Result = Operation.GetResult(NumberA,NumberB,operate);
System.out.println