C#基于简单工厂模式实现的计算器功能示例

C#基于简单工厂模式实现的计算器功能示例

概述

本文将介绍如何基于简单工厂模式实现一个计算器功能的示例。我们会通过编写C#代码来实现一个简单的计算器,能够支持加、减、乘、除四种运算。

简单工厂模式

在讲解示例之前,我们先来了解一下简单工厂模式。简单工厂模式是一种创建型设计模式,它提供了一个工厂方法来创建对象。这种模式可以被认为是实现了基本的对象创建的代码复用。简单工厂模式的主要思想是将对象的创建过程移动到一个单独的工厂中,而不是在每个客户端都去实例化对象。

计算器示例说明

现在,我们来看看如何基于简单工厂模式实现一个计算器功能。

1. 定义接口和实现类

我们首先需要定义一个接口 ICalculator 来表示计算器。然后,我们再定义四个实现类 AddCalculatorSubCalculatorMulCalculatorDivCalculator 来分别表示加法、减法、乘法和除法。

public Interface ICalculator
{
    double Calculate(double a, double b);
}

public class AddCalculator : ICalculator
{
    public double Calculate(double a, double b)
    {
        return a + b;
    }
}

public class SubCalculator : ICalculator
{
    public double Calculate(double a, double b)
    {
        return a - b;
    }
}

public class MulCalculator : ICalculator
{
    public double Calculate(double a, double b)
    {
        return a * b;
    }
}

public class DivCalculator : ICalculator
{
    public double Calculate(double a, double b)
    {
        if (b == 0)
        {
            throw new DivideByZeroException();
        }
        return a / b;
    }
}

2. 实现简单工厂类

接下来,我们需要实现一个简单工厂类 CalculatorFactory 来创建 ICalculator 对象。这个工厂类有一个静态方法 CreateCalculator,根据不同的运算符,返回相应的 ICalculator 对象。

public static class CalculatorFactory
{
    public static ICalculator CreateCalculator(char op)
    {
        switch(op)
        {
            case '+' :
                return new AddCalculator();
            case '-' :
                return new SubCalculator();
            case '*' :
                return new MulCalculator();
            case '/' :
                return new DivCalculator();
            default :
                throw new ArgumentException("Invalid operator", nameof(op));
        }
    }
}

3. 使用计算器

现在我们已经实现了接口、实现类和简单工厂类,接下来就能使用它们来完成计算器的功能。

class Program
{
    static void Main(string[] args)
    {
        Console.Write("a = ");
        double a = double.Parse(Console.ReadLine());

        Console.Write("b = ");
        double b = double.Parse(Console.ReadLine());

        Console.Write("operator (+, -, *, /): ");
        char op = char.Parse(Console.ReadLine());

        ICalculator calculator = CalculatorFactory.CreateCalculator(op);
        double result = calculator.Calculate(a, b);

        Console.WriteLine($"{a} {op} {b} = {result}");
    }
}

以上代码中,用户输入了两个数字和一个运算符,CalculatorFactory.CreateCalculator(op) 返回相应的 ICalculator 对象,使用 ICalculator 对象计算出结果,最后输出结果。

示例说明

我们来看两个示例来更好理解这个计算器示例:

示例一:加法计算

假设我们要计算 1 + 2 的值,运行程序,按照提示输入以下内容:

a = 1
b = 2
operator (+, -, *, /): +

程序会输出:

1 + 2 = 3

示例二:除法计算

假设我们要计算 10 / 2 的值,运行程序,按照提示输入以下内容:

a = 10
b = 2
operator (+, -, *, /): /

程序会输出:

10 / 2 = 5

总结

本文演示了如何基于简单工厂模式实现一个计算器功能的示例。我们首先定义了一个 ICalculator 接口,然后实现四个实现类分别表示加法、减法、乘法和除法。接着,我们实现了一个简单工厂类 CalculatorFactory 来创建 ICalculator 对象。最后,我们使用这个接口、实现类和工厂类来完成计算器功能。

这个示例展示了在实际开发中如何使用简单工厂模式来组织对象的创建过程,并达到代码的复用及可扩展性的目的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基于简单工厂模式实现的计算器功能示例 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • CefSharp如何进行页面的缩放(Ctrl+滚轮)

    CefSharp是基于Chromium开发的一种.NET WinForms或WPF控件,可用于将HTML、CSS和JavaScript呈现为.NET应用程序的UI。如果您想要在CefSharp中实现页面缩放功能,您可以遵循以下步骤: 方法一:使用JS注入实现缩放功能 该方法使用JS代码在页面上注入脚本,实现页面缩放的功能。它不需要在C#代码中进行更改。 在C…

    C# 2023年6月6日
    00
  • 解析C#的扩展方法

    以下是解析C#的扩展方法的完整攻略: 什么是C#的扩展方法? C#的扩展方法是一种特殊的静态方法,可以向已存在的类添加新的方法。使用扩展方法可以使已经封装好的类变得更加灵活,方便开发者自定义其功能。 如何定义扩展方法? 定义扩展方法需要以下几个要素: 扩展方法必须被定义在静态类中。 扩展方法必须使用this关键字作为方法的第一个参数,表示需要扩展的类型。 扩…

    C# 2023年5月15日
    00
  • asp.net得到本机数据库实例的两种方法代码

    下面我将详细讲解如何在ASP.NET中得到本机数据库实例的两种方法代码。 方法一:使用LocalDB连接数据库 1. 安装LocalDB 首先,我们需要在本机安装LocalDB。可以在微软的官方网站上下载并安装:https://www.microsoft.com/en-us/sql-server/sql-server-downloads 2. 创建数据库 安…

    C# 2023年5月31日
    00
  • C# FileAttributes.ReadOnly:表示文件或目录为只读文件或目录

    FileAttributes.ReadOnly 是一个枚举值,表示文件或文件夹是否为只读文件或文件夹。它主要用于设置或获取文件或文件夹的只读属性。 使用 FileAttributes.ReadOnly 可以帮助我们保护某些重要的文件或文件夹,避免它们被意外的修改或删除。 下面是对使用 FileAttributes.ReadOnly 的完整攻略: 1. 获取文…

    C# 2023年4月19日
    00
  • C#中使用Microsoft Unity记录日志

    下面是“C#中使用Microsoft Unity记录日志”的完整攻略: 1. Microsoft Unity是什么? Microsoft Unity是一个开源的轻量级IoC容器,它可以让您实现面向对象编程的优秀设计模式,如依赖注入和控制反转。同时,它还提供一些内置服务,如类型注册、对象解析和构建器模式等。 2. 使用Microsoft Unity记录日志 在…

    C# 2023年6月6日
    00
  • 如何运行编译.NetCore的源码?

    作为.net的开发人员,为了能更好的code,我们要知其然并知其所以然,了解.netcore的源码是我们的基本素养✊ 源码地址 .NET Platform (github.com) 这个是.net在github上开源的源码地址aspnetcore 这个是.netcore的源码地址runtime 这个是运行时的源码地址,有些.netcore源码会依赖此运行时(…

    C# 2023年4月24日
    00
  • Android编程实现google消息通知功能示例

    这里是关于“Android编程实现google消息通知功能示例”的完整攻略。 什么是Google消息通知功能? Google消息通知是Android系统提供的一种通知机制,通过它可以在屏幕上显示异步事件的消息提醒。这些消息会在事件发生时,通过通知栏等界面进行展示,从而让用户更方便快捷地查看和处理各种消息。 Google消息通知功能实现步骤 在Android中…

    C# 2023年6月6日
    00
  • C#实现打字游戏

    C#实现打字游戏 简介 打字游戏是一个有趣且有益的游戏,它可以帮助人们提高打字速度。本文将介绍如何使用C#编写打字游戏。我们需要实现以下功能:1. 显示待输入的字符串。2. 监听键盘输入并与待输入的字符串进行比对。3. 统计输入的正确字符数和错误字符数及其所占的比例。4. 显示剩余时间。5. 完成游戏后显示得分。 实现方法 步骤一:创建项目 打开Visual…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部