一、工厂模式在开发中的运用
面试题: 写一个简单的计算器。
//示例示1:
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
//1.接受客户端输入
System.out.println("---计算器程序---");
System.out.println("输入第一个操作数");
Scanner scanner = new Scanner(System.in);
String strNum1 = scanner.nextLine();
System.out.println("输入运算符");
String oper = scanner.nextLine();
System.out.println("输入第二个操作数");
String strNum2 = scanner.nextLine();
double result = 0;
//2.进行运算
if("+".equals(oper)){
result = Double.valueOf(strNum1) + Double.valueOf(strNum2);
} else if ("-".equals(oper)) {
result = Double.valueOf(strNum1) - Double.valueOf(strNum2);
} else if("*".equals(oper)) {
result = Double.valueOf(strNum1) * Double.valueOf(strNum2);
} else if("/".equals(oper)) {
result = Double.valueOf(strNum1) / Double.valueOf(strNum2);
}
//3.返回结果
System.out.println(strNum1 + oper + strNum2 + " = " + result);
}
}
*缺点:完全面向过程设计,缺少代码重用
//示例2: 简单工厂模式
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();
}
public class AddOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1() + this.getNum2();
return result;
}
}
public class SubtractionOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1() - this.getNum2();
return result;
}
}
public class MultiplyOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1() * this.getNum2();
return result;
}
}
public class DividedOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1() / this.getNum2();
return result;
}
}
public class OperationFactory {
public static Operation getOperation(String oper){
if("+".equals(oper)) {
return new AddOperation();
} else if("-".equals(oper)) {
return new SubtractionOperation();
} else if("*".equals(oper)) {
return new MultiplyOperation();
} else if("/".equals(oper)) {
return new DividedOperation();
}
return null;
}
}
public class MainClass {
public static void main(String[] args) {
//1.接受客户端输入
System.out.println("---计算器程序---");
System.out.println("输入第一个操作数");
Scanner scanner = new Scanner(System.in);
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: 工厂模式
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();
}
public class AddOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1() + this.getNum2();
return result;
}
}
public class SubtractionOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1() - this.getNum2();
return result;
}
}
public class MultiplyOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1() * this.getNum2();
return result;
}
}
public interface OperationFactory {
public Operation getOperation();
}
public class AddOperationFactory implements OperationFactory {
@Override
public Operation getOperation() {
return new AddOperation();
}
}
public class SubtractionOperationFactory implements OperationFactory {
@Override
public Operation getOperation() {
return new SubtractionOperation();
}
}
public class MultiplyOperationFactory implements OperationFactory {
@Override
public Operation getOperation() {
return new MultiplyOperation();
}
}
public class DivideOperationFactory implements OperationFactory {
@Override
public Operation getOperation() {
return new DividedOperation();
}
}
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
//1.接受客户端输入
System.out.println("---计算器程序---");
System.out.println("输入第一个操作数");
Scanner scanner = new Scanner(System.in);
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);
OperationFactory factory = null;
//2.进行运算
if("+".equals(oper)) {
factory = new AddOperationFactory();
} else if("-".equals(oper)) {
factory = new SubtractionOperationFactory();
} else if("*".equals(oper)) {
factory = new MultiplyOperationFactory();
} else if("/".equals(oper)) {
factory = new DivideOperationFactory();
}
Operation operation = factory.getOperation();
operation.setNum1(num1);
operation.setNum2(num2);
result = operation.getResult();
//3.返回结果
System.out.println(strNum1 + oper + strNum2 + " = " + result);
}
}