设计模式-计算器-简单工厂模式

简单工厂模式含义

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来实现。这里的场景是我们在控制台输入想要运算的数字和运算符号最终输出运算结果。

设计模式-计算器-简单工厂模式_第1张图片

工厂模式-计算器-流程图

​ 工厂模式实现计算机操作的流程图如下所示:

设计模式-计算器-简单工厂模式_第2张图片

​ 这里面的三个角色,第一个角色是Calculator,我们可以写成接口,第二个角色是具体运算的实现类Add、Divide、Subtract、Multiply,第三个角色就是关键的工厂类CalculateFactory。

工厂模式-计算器-代码实现

​ IDEA中代码实现的流程图如下所示:

设计模式-计算器-简单工厂模式_第3张图片

Calculator.java

/**
 * @version 1.0
 * @ClassName Calculator
 * @description
 * @date 2021/10/17 21:27
 */
public interface Calculator {
    
    /**
     * 运算操作
     * @param v1 运算值1
     * @param v2 运算值2
     * @return  java.lang.String
     * @date  2021/10/17 21:30
     */
    String calculate(double v1, double v2);
}

Add.java

/**
 * @version 1.0
 * @ClassName Add
 * @description 添加操作运算
 * @date 2021/10/17 21:30
 */
public class Add implements Calculator {
    @Override
    public String calculate(double v1, double v2) {
        return String.valueOf(v1 + v2);
    }
}

Subtract.java

/**
 * @version 1.0
 * @ClassName Subtract
 * @description 减操作运算
 * @date 2021/10/17 21:32
 */
public class Subtract implements Calculator {
    @Override
    public String calculate(double v1, double v2) {
        return String.valueOf(v1 - v2);
    }
}

Multiply.java

/**
 * @version 1.0
 * @ClassName Multiply
 * @description 乘运算
 * @date 2021/10/17 21:33
 */
public class Multiply implements Calculator {
    @Override
    public String calculate(double v1, double v2) {
        return String.valueOf(v1 * v2);
    }
}

Divide.java

/**
 * @version 1.0
 * @ClassName Divide
 * @description
 * @date 2021/10/17 21:34
 */
public class Divide implements Calculator {
    @Override
    public String calculate(double v1, double v2) {
        return String.valueOf(v1 / v2);
    }
}

CalculateFactory.java

/**
 * @ClassName CalculateFactory
 * @description 运算工厂,专门用来创建运算对象的
 * @version 1.0
 * @date 2021/10/17 21:35
 */
public class CalculateFactory {

    /**
     * 根据运算符号进行创建对应的加减乘除的运算对象
     * @param type 传入运算符号
     * @return  Calculator
     * @date  2021/10/17 21:40
     */
    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;
/**
 * @version 1.0
 * @ClassName CalculateClient
 * @description 计算器的调用方
 * @date 2021/10/17 21:42
 */
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

你可能感兴趣的:(设计模式与架构,java,设计模式)