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日

相关文章

  • 向一个数组中插入一个1~100的随机数

    关于向一个数组中插入一个1~100的随机数的完整攻略,具体步骤如下: 1. 声明一个数组 首先,需要在代码中声明一个数组,以便随后向其中插入随机数。可以使用如下语句: int[] arr = new int[n]; 其中,n代表数组的长度。这里使用了Java语言,如果是其他语言,语法可能略有不同,但是思路还是一致的。 2. 生成随机数 接着,需要生成一个1~…

    C# 2023年6月8日
    00
  • c#数据绑定之向查询中添加参数(.Net连接外部数据库)

    C# 数据绑定之向查询中添加参数(.Net连接外部数据库) 在C#中,我们可以使用.NET连接外部数据库,实现数据绑定等操作。在查询数据时,有时需要向查询中添加参数,以实现更加精准的查询结果。 1. 添加数据库连接 首先,我们需要添加数据库连接,使用SqlConnection类来连接数据库。连接字符串可以通过Visual Studio中的数据源管理器来获取。…

    C# 2023年6月1日
    00
  • C#如何通过T4自动生成代码详解

    关于“C#如何通过T4自动生成代码详解”的完整攻略,我将介绍以下几个方面: T4模板的概念和基础语法 如何使用T4模板自动生成C#代码 两个示例说明 1. T4模板的概念和基础语法 T4是一种文本模板转换器,可以将输入的文本模板转化成编程代码或其他任何文本。在Visual Studio中,每个T4模板都是一个单独的文本文件,后缀为.tt。T4模板文件使用特殊…

    C# 2023年5月31日
    00
  • ASP.NET MVC在基控制器中处理Session

    处理Session是ASP.NET开发中的一个常见需求。我们可以在ASP.NET MVC的基控制器中统一处理Session,这样可以更方便地管理Session数据,也提高了代码的复用性。 以下是基控制器中处理Session的完整攻略: 创建一个基控制器 首先,在项目中创建一个基控制器,该基控制器将包含所有控制器所需的公共方法和属性。在该基控制器中处理Sess…

    C# 2023年5月31日
    00
  • C#非托管泄漏中HEAP_ENTRY的Size对不上解析

    首先需要了解的是,C#是一门托管语言,不直接操作操作系统资源,它将语言运行时交给CLR处理。而非托管语言则可以直接操作操作系统资源,如C++、C等。 当C#程序中使用非托管代码时,就有可能会遇到内存泄漏的问题。 一种常见的内存泄漏是由于使用了错误的HeapFree方法导致的,这时可以考虑使用GCHandle.Alloc方法来获取一个指向对象的Handle,并…

    C# 2023年6月6日
    00
  • C# 获取XML文件内容的多种方式总结

    下面我来详细讲解一下“C# 获取XML文件内容的多种方式总结”的攻略。 1. 前言 XML(Extensible Markup Language)是一种非常常见的数据交换格式,很多程序都需要从XML文件中读取数据或将数据写入XML文件。而在C#中,获取XML文件内容的方法有很多种,本文将对其中比较常用的几种进行总结和说明。 2. 使用XmlDocument类…

    C# 2023年6月1日
    00
  • C# winform打印excel的方法

    下面是关于如何使用C# WinForm打印Excel的完整攻略,包含以下几个步骤: 1. 引用Excel Interop 要打印Excel,需要使用Microsoft Excel Interop库。这个库需要先引用才能在程序中使用。下面是引用Excel Interop的具体步骤: 在Visual Studio的工具栏中选择“项目”。 在项目中选择“添加引用”…

    C# 2023年6月7日
    00
  • C#的自定义语法糖的使用详解

    C#的自定义语法糖的使用详解 什么是自定义语法糖? 自定义语法糖是指一种用于简化特定代码块的特殊语法。在C#中,通过定义类似于函数的“扩展方法”或者特殊的属性,可以提供更加便捷、易读的代码实现方式。 如何使用自定义语法糖? 通过编写自己的扩展方法或者属性,可以使用自定义的语法糖。以下是具体的实现步骤。 定义扩展方法 通过以下代码定义一个简单的扩展方法,用于在…

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