Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。)
这里我理解的简单工厂模式主要包含三个角色,第一个角色是我们要创建的实体类接口或者抽象类,第二个角色就是一系列详细的实现类,第三个角色就是我们的Factory工厂类,我们工厂类的主要作用就是根据不同的参数进行创建对应的实现类对象。
工厂模式-计算器-场景说明 下面我们先说一下实现计算器的业务场景,我们可以实现在控制台输入输出的方式实现我们的计算器的操作,当然时间比较充足的可以使用java的swing来实现。这里的场景是我们在控制台输入想要运算的数字和运算符号最终输出运算结果。
工厂模式-计算器-流程图 工厂模式实现计算机操作的流程图如下所示:
这里面的三个角色,第一个角色是Calculator,我们可以写成接口,第二个角色是具体运算的实现类Add、Divide、Subtract、Multiply,第三个角色就是关键的工厂类CalculateFactory。
工厂模式-计算器-代码实现 IDEA中代码实现的流程图如下所示:
Calculator.java
public interface Calculator {
String calculate(double v1, double v2);
}
Add.java
public class Add implements Calculator {
@Override
public String calculate(double v1, double v2) {
return String.valueOf(v1 + v2);
}
}
Subtract.java
public class Subtract implements Calculator {
@Override
public String calculate(double v1, double v2) {
return String.valueOf(v1 - v2);
}
}
Multiply.java
public class Multiply implements Calculator {
@Override
public String calculate(double v1, double v2) {
return String.valueOf(v1 * v2);
}
}
Divide.java
public class Divide implements Calculator {
@Override
public String calculate(double v1, double v2) {
return String.valueOf(v1 / v2);
}
}
CalculateFactory.java
public class CalculateFactory {
public static Calculator createCalculator(String type) {
Calculator calculator = null;
switch (type) {
case "+":
calculator = new Add();
break;
case "-":
calculator = new Subtract();
break;
case "*":
calculator = new Multiply();
break;
case "/":
calculator = new Divide();
break;
default:
break;
}
return calculator;
}
}
CalculateClient.java
import java.util.Scanner;
public class CalculateClient {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入第一个数");
double first = scanner.nextDouble();
System.out.println("输入操作符");
String operation = scanner.next();
System.out.println("输入第二个数");
double second = scanner.nextDouble();
// 工厂类创建运算对象并调用运算方法
String result = CalculateFactory.createCalculator(operation).calculate(first, second);
System.out.println("结果:" + result);
}
操作结果
输入第一个数 1 输入操作符 * 输入第二个数 2 结果:2.0



