深入浅出设计模式之简单工厂模式
一、概述
简单工厂模式是常用的设计模式之一,属于创建者模式,可以根据不同条件创建不同实例。
二、实现
2.1 定义抽象运算类
让加减乘除的具体实现类去继承这个抽象类。
/**
* Operattion 抽象运算类
*/
public abstract class Operation {
private double numberA;
private double numberB;
public double getNumberA(){
return numberA;
}
public void setNumberA(double value){
numberA = value;
}
public double getNumberB(){
return numberB;
}
public void setNumberB(double value){
numberB = value;
}
public double getResult(){
double result = 0;
return result;
}
}
2.2 实现加减乘除实体类
子类对抽象类的获取结果进行重写。
- 加法
/**
* 加法类
*/
public class OperationAdd extends Operation {
@Override
public double getResult() {
double result = 0;
result = getNumberA() + getNumberB();
return result;
}
}
- 减法
public class OperationSub extends Operation {
@Override
public double getResult() {
double result = 0;
result = getNumberA() - getNumberB();
return result;
}
}
- 乘法
public class OperationMul extends Operation {
@Override
public double getResult() {
double result = 0;
result = getNumberA() * getNumberB();
return result;
}
}
- 除法
public class OperationDiv extends Operation {
@Override
public double getResult() {
double result = 0;
try {
result = getNumberA() / getNumberB();
}catch (Exception e){
throw e;
}
return result;
}
}
2.3 定义运算的工厂类
import java.util.Objects;
public class OperationFactory {
public static Operation createOperate(String operate){
Operation oper = null;
// 通过不同的字符串创建不同的类的对象
if(Objects.equals(operate, "+")){
oper = new OperationAdd();
return oper;
}else if(Objects.equals(operate, "-")){
oper = new OperationSub();
return oper;
}else if(Objects.equals(operate, "*")){
oper = new OperationMul();
return oper;
}else if(Objects.equals(operate, "/")){
oper = new OperationDiv();
return oper;
}else{
return oper;
}
}
}
2.4 调用
public class Main {
public static void main(String[] args) {
Operation oper;
oper = OperationFactory.createOperate("+");
oper.setNumberA(2.5);
oper.setNumberB(4.1);
double result = oper.getResult();
System.out.println("add result = " + result);
oper = OperationFactory.createOperate("-");
oper.setNumberA(2.5);
oper.setNumberB(4.1);
result = oper.getResult();
System.out.println("sub result = " + result);
oper = OperationFactory.createOperate("*");
oper.setNumberA(2.5);
oper.setNumberB(4.1);
result = oper.getResult();
System.out.println("Mul result = " + result);
oper = OperationFactory.createOperate("/");
oper.setNumberA(2.5);
oper.setNumberB(4.1);
result = oper.getResult();
System.out.println("Div result = " + result);
}
}
三、结果
add result = 6.6
sub result = -1.5999999999999996
Mul result = 10.25
Div result = 0.6097560975609757