深入浅出设计模式之简单工厂模式

160 阅读1分钟

深入浅出设计模式之简单工厂模式

一、概述

简单工厂模式是常用的设计模式之一,属于创建者模式,可以根据不同条件创建不同实例。

二、实现

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