首页 > 其他 > 详细

大话设计模式学习笔记-简单工厂模式

时间:2018-11-24 16:17:07      阅读:148      评论:0      收藏:0      [点我收藏+]

简单工厂模式

从父类派生出多个子类时,使用一个单独的类来做创造实例的过程,这就是工厂。

简单计算器

每种计算都是获取数,返回结果的过程,故而可以将每种计算单独封装为一个类,并继承父类Operation。在父类中声明一个虚方法GetResult,每种计算子类都要重写父类该方法以进行自己的计算。

父类:计算类

public class Operation{
    //两数的属性、获得结果虚方法
    public double NumbleA { get; set; }
    public double NumbleB { get; set; }
    public virtual double GetResult() => default(double);       
}

派生的子类:加减乘除类

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

工厂类:计算工厂类

class OperationFactory{
    //根据输入的运算符进行判断生成哪种子类的静态方法
    public static Operation CreateOperate(string operate){
        Operation oper = null;
        switch (operate){
            case "+":
                oper = new OperationAdd();
                break;
            case "-":
                oper = new OperationSub();
                break;
            case "*":
                oper = new OperationMul();
                break;
            case "/":
                oper = new OperationDiv();
                break;
        }
        return oper;
    }
}

测试类:程序类

class Program{
    static void Main(string[] args){
        Console.WriteLine("请输入一个数:");
        double n1=Convert.ToDouble(Console.ReadLine());
        Console.WriteLine("请输入运算符:");
        var of=OperationFactory.CreateOperate(Console.ReadLine());
        Console.WriteLine("请输入一个数");
        double n2 = Convert.ToDouble(Console.ReadLine());
        of.NumbleA = n1;
        of.NumbleB = n2;
        Console.WriteLine($"运算结果为:{of.GetResult()}");
        Console.ReadKey();
    }
}

 

大话设计模式学习笔记-简单工厂模式

原文:https://www.cnblogs.com/errornull/p/10012252.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!