工厂模式在开发中的运用
一、面试题
计算器
二、利用简单工厂模式解决,避免面向过程
2.1 Operation
public abstract class Operation {
private double num1;
private double num2;
public double getNum1() {
return num1;
}
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum2() {
return num2;
}
public void setNum2(double num2) {
this.num2 = num2;
}
public abstract double getResult();
}
2.2 AddOperation
public class AddOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1()+this.getNum2();
return result;
}
}
2.3 SubOperation
public class SubtractionOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1()-this.getNum2();
return result;
}
}
2.4 OperationFactory
public class OperationFactory {
public static Operation getOperation(String oper){
if("+".equals(oper))
return new AddOperation();
if("-".equals(oper))
return new SubtractionOperation();
return null;
}
}
2.5 MainClass
public class MainClass {
public static void main(String[] args){
//1、接受控制台输入
System.out.println("--- 计算器程序 ---");
Scanner scanner = new Scanner(System.in);
System.out.println("输入第一个操作数");
String strNum1 = scanner.nextLine();
System.out.println("输入运算符");
String oper = scanner.nextLine();
System.out.println("输入第二个操作数");
String strNum2 = scanner.nextLine();
double result = 0;
double num1 = Double.parseDouble(strNum1);
double num2 = Double.parseDouble(strNum2);
//2、进行运算
Operation operation = OperationFactory.getOperation(oper);
operation.setNum1(num1);
operation.setNum2(num2);
result = operation.getResult();
//3、返回结果
System.out.println(strNum1+" "+oper+" "+strNum2+" = "+result);
}
}
三、工厂方法模式进行优化
3.1 Operation
public abstract class Operation {
private double num1;
private double num2;
public double getNum1() {
return num1;
}
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum2() {
return num2;
}
public void setNum2(double num2) {
this.num2 = num2;
}
public abstract double getResult();
}
3.2 AddOperation
public class AddOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1()+this.getNum2();
return result;
}
}
3.3 OperationFactory
public interface OperationFactory {
public Operation getOperation();
}
3.4 AddOperationFactory
public class AddOperationFactory implements OperationFactory {
@Override
public Operation getOperation() {
return new AddOperation();
}
}
3.5 MainClass
public class MainClass {
public static void main(String[] args){
//1、接受控制台输入
System.out.println("--- 计算器程序 ---");
Scanner scanner = new Scanner(System.in);
System.out.println("输入第一个操作数");
String strNum1 = scanner.nextLine();
System.out.println("输入运算符");
String oper = scanner.nextLine();
System.out.println("输入第二个操作数");
String strNum2 = scanner.nextLine();
double result = 0;
double num1 = Double.parseDouble(strNum1);
double num2 = Double.parseDouble(strNum2);
//2、进行运算
if("+".equals(oper)){
OperationFactory operationFactory = new AddOperationFactory();
Operation operation = operationFactory.getOperation();
operation.setNum1(num1);
operation.setNum2(num2);
result = operation.getResult();
}
if("-".equals(oper)){
OperationFactory operationFactory = new SubtractionOperationFactory();
Operation operation = operationFactory.getOperation();
operation.setNum1(num1);
operation.setNum2(num2);
result = operation.getResult();
}
//3、返回结果
System.out.println(strNum1+" "+oper+" "+strNum2+" = "+result);
}
}