(续上篇) 
     次日,小菜再来找大鸟,问道:“你昨天说计算器这样的小程序还可以用到面向对象三大特性?继承和多态怎么可能用得上,我实在不可理解。”
     大鸟:“小菜很有钻研精神嘛!好,今天我让你功力加深一级。你先要考虑一下,你昨天写的这个代码,能否做到很灵活的可修改和扩展呢?”
     小菜:“我已经把业务和界面分离了呀,这不是很灵活了吗?”
     大鸟:“那我问你,现在如果我希望增加一个开根(sqrt)运算,你如何改?”
     小菜:“那只需要改Operation类就行了,在switch中加一个分支就行了。”
     大鸟:“问题是你要加一个平方根运算,却需要把加减乘除的运算都得来参与编译,如果你一不小心,把加法运算改成了减法,这不是大大的糟糕。

打个比方,如果现在公司要求你为公司的薪资管理系统做维护,原来只有技术人员(月薪),市场销售人员(底薪+提成),经理(年薪+股份)三种运算算法,现在要增加兼职工作人员的(时薪)算法,但按照你昨天的程序写法,公司就必须要把包含有的原三种算法的运算类给你,让你修改,你如果心中小算盘一打,‘TMD,公司给我的工资这么低,我真是郁闷,这会有机会了’,于是你除了增加了兼职算法以外,在技术人员(月薪)算法中写了一句 :

【简单工厂模式】的美妙体会 -06if (员工是小菜)
}

那就意味着,你的月薪每月都会增加10%(小心被抓去坐牢),本来是让你加一个功能,却使得原有的运行良好的功能代码产生了变化,这个风险太大了。你明白了吗?”
      小菜:“哦,你的意思是,我应该把加减乘除等运算分离,修改其中一个不影响另外的几个,增加运算算法也不影响其它代码,是这样吗?”
      大鸟:“自己想去吧,如何用继承和多态,你应该有感觉了。”
      小菜:“OK,我马上去写。”

//运算类
public class Calculator
{
    private double _numberA=0;
    private string _operate="";
    private double _numberB=0;

    //数字A
    public double NumberA
    {
        get{return _numberA;}
        set {_numberA = value;}
    }

    //数字B
    public double NumberB
    {
        get{return _numberB;}
        set {_numberB = value;}
    }

    //得到运算结果
    public virtual double GetResult()
    {
        double result =0;
        return result;
    }
}

//加法
public CalculatorAdd : Calculator
{
    public override double GetResult()
    {
        double result=0;
        result = NumberA + NumberB;
        return result;
    }
}

//减法
public CalculatorSub : Calculator
{
    public override double GetResult()
    {
        double result=0;
        result = NumberA - NumberB;
        return result;
    }
}

//乘法
public CalculatorRide : Calculator
{
    public override double GetResult()
    {
        double result=0;
        result = NumberA * NumberB;
        return result;
    }
}

//除法
public CalculatorDiv : Calculator
{
    public override double GetResult()
    {
        double result=0;
        if(NumberB ==0)
            throw new Exception("除数不能为0。");
        result = NumberA / NumberB;
        return result;
    }
}
运算类—运算类的子类

相关文章:

  • 2021-09-04
  • 2022-12-23
  • 2022-12-23
  • 2021-11-21
  • 2021-05-01
  • 2021-06-09
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-09
  • 2022-12-23
  • 2021-07-13
  • 2021-04-11
  • 2021-09-27
  • 2021-08-03
相关资源
相似解决方案