简单的工厂模式

说到工厂模式,我们在此处先来做一道编程题吧!

假设面试的时候,面试官要你做一道笔试题:给定两个数字A和B,然后敲定运算符,根据给定的运算符来得到所需的结果!

我相信,很多的面试者最先写出来的代码都是这个样子的:

static void Main(string[] args)
{
    while (true)
    {
        Console.Write("请输入数字A:");
        string strNumA = Console.ReadLine();
        Console.Write("请输入数字B:");
        string strNumB = Console.ReadLine();
        Console.Write("请选择操作运算符(+、-、*、/):");
        string strOperarte = Console.ReadLine();
        string Result = "";
        switch (strOperarte)
        {
            case "+":
                Result = Convert.ToString(Convert.ToDouble(strNumA) + Convert.ToDouble(strNumB));
                break;
            case "-":
                Result = Convert.ToString(Convert.ToDouble(strNumA) - Convert.ToDouble(strNumB));
                break;
            case "*":
                Result = Convert.ToString(Convert.ToDouble(strNumA) * Convert.ToDouble(strNumB));
                break;
            case "/":
                if (strNumB == "0")
                    Result = "警告:除数不能为 0";
                else
                    Result = Convert.ToString(Convert.ToDouble(strNumA) / Convert.ToDouble(strNumB));
                break;
            default:
                Result = "你当前的输入有误";
                break;
        }
        Console.WriteLine(Result);
    }
    Console.ReadKey();
}

上面的这段代码,虽然看上去可行,但是在企业中的进行代码编写的时候,一般是讲究代码的复用的。假设我们需要添加一个求平方根的运算的话,那你要怎么更改呢?

所以在这里我们就需要用到,这里我们说到的工厂模式了。

简单工厂模式:又叫做是静态的工厂方法模式,由一个工厂的对象 创造出创建哪一类的实例化对象,实现对应的过程。

看到上面的定义之后,我们可以明确的看出来,在此处我们需要用到的是虚函数实现多态的实例化操作。主要的实现代码如下:

先实现几个基类,定义基本的运算:

public  class Operation
{
    private double _numA = 0;
    private double _numB = 0;
    public double NumA
        {
            set { _numA = value; }
            get { return _numA; }
        }
    public double NumB
        {
            set { _numB = value; }
            get { return _numB; }
        }
    //定义一个虚函数 
    public virtual double GetResult()
        {
            return 0;
        }
}

接着,继续定义几个需要实现运算的子类:

public class OperationAdd : Operation
    {
        public override double GetResult()
        {
            return NumA + NumB;
        }
    }
public class OperationSub : Operation
    {
        public override double GetResult()
        {
            return NumA - NumB;
        }
    }
public class OperationMul : Operation
    {
        public override double GetResult()
        {
            return NumA * NumB;
        }
    }
public class OperationDiv : Operation
    {
        public override double GetResult()
        {
            if (NumB == 0)
                throw new Exception("除数不能为0");
            return NumA / NumB;
        }
    }

当我们需要添加运算符的时候,只需要添加的是一个子类实现运算就好了。

下面是实现一个工厂类,可以实现多对象的调用:

class OperationFactory
{
    public static Operation CreateOperator(string strOper)
        {
            Operation Oper = null;
            switch (strOper)
            {
                case "+":
                    Oper = new OperationAdd();
                    break;
                case "-":
                    Oper = new OperationSub();
                    break;
                case "*":
                    Oper = new OperationMul();
                    break;
                case "/":
                    Oper = new OperationDiv();
                    break;
            }
            return Oper;
        }
}

上面的代码,主要是运用到面向对象的多态,来实现自己的函数实现 。

这样一个简单的工厂类就实现了。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值