栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

简单工厂模式含义

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

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

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

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

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

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

Calculator.java
public interface Calculator {
    
    
    String calculate(double v1, double v2);
}
Add.java
public class Add implements Calculator {
    @Override
    public String calculate(double v1, double v2) {
        return String.valueOf(v1 + v2);
    }
}
Subtract.java
public class Subtract implements Calculator {
    @Override
    public String calculate(double v1, double v2) {
        return String.valueOf(v1 - v2);
    }
}
Multiply.java
public class Multiply implements Calculator {
    @Override
    public String calculate(double v1, double v2) {
        return String.valueOf(v1 * v2);
    }
}
Divide.java
public class Divide implements Calculator {
    @Override
    public String calculate(double v1, double v2) {
        return String.valueOf(v1 / v2);
    }
}
CalculateFactory.java
public class CalculateFactory {

    
    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;

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/332768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号