设计模式-简单工厂模式

发布时间 2023-03-22 21:15:56作者: Y.Debby

用任意一种面向对象语句实现计算机程序,要求输入两个数和符号,得到结果。

小菜:

Console.WriteLine("please input first interger");
string first_number = Console.ReadLine();
Console.WriteLine("please input second interger");
string second_number = Console.ReadLine();
Console.WriteLine("please input yunsaunfu");
string caozuo = Console.ReadLine();

double result_number = 0;

if (caozuo == "+")
result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number);

if (caozuo == "-")
result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number);

if (caozuo == "*")
result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number);

if (caozuo == "/")
result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number);

Console.WriteLine(result_number);

问题:

  1. 4个if 分支,每个都要走一遍
  2. 除法没有考虑异常的情况

改进如下:

Console.WriteLine("please input first interger");
string first_number = Console.ReadLine();

Console.WriteLine("please input second interger");
string second_number = Console.ReadLine();

Console.WriteLine("please input yunsaunfu");
string caozuo = Console.ReadLine();


Console.WriteLine(first_number);
Console.WriteLine(second_number);
Console.WriteLine(caozuo);

double result_number = 0;

switch (caozuo)
{
    case "+":
        result_number = Convert.ToDouble(first_number) + Convert.ToDouble(second_number);
        break;
    case "-":
        result_number = Convert.ToDouble(first_number) - Convert.ToDouble(second_number);
        break;
    case "*":
        result_number = Convert.ToDouble(first_number) * Convert.ToDouble(second_number);
        break;
    case "/":
        if (second_number == "0")
            Console.WriteLine("can't be zero");
        else
            result_number = Convert.ToDouble(first_number) / Convert.ToDouble(second_number);
        break;
}
    
Console.WriteLine(result_number);

改好了,可是出题者是想用面向对象语言来实现,也就是要用面向对象。

初级编程者遇到问题就用计算机能理解的逻辑来描述和解决问题。

这本身没有错,但这样的思维使得我们的程序只能满足当前的需求,程序不容易维护,不容易扩展,更不容易复用。从而达不到高质量代码的要求。

那么,应该怎么做呢?

===============================================================

活字印刷的故事。

曹操:喝酒唱歌,人生真爽,...... 印刷工匠开始刻板印刷。

曹操认为太俗,改为:对酒当歌,人生真爽,...... 印刷工匠开始刻板印刷。

曹操认为太直接,改为:对酒当歌,人生几何,...... 印刷工匠开始刻板印刷。累死累活。拼命干。

问题出在哪里?改字的时候,必须要整个刻板重新刻。

对,如果有了活字印刷,只需要更改四个字就可以,其他工作都未白做。