1.简单工厂模式

案例

例1:曹操吟诗工匠刻板

差的:

喝酒唱歌,人生真爽

对酒当歌,人生真爽

对酒当歌,人生几何

优的:

例2:小菜面试

小菜改进后:

class Program{
    static void Main(string[] args){
        try{
            Console.Write("请输入数字A:");
                string strNumberA = Console.ReadLine();
            Console.Write("请选择运算符号(+、-、*、/):");
                string strOperate=Console.ReadLine();
            Console.Write("请输入数字B:");
                string strNumberB=Console.ReadLine();
            string strResult="";
            switch(strOperate){
                case"+":
                    strResult=Convert.ToString(Convert.ToDouble(strNumberA)
                                               +Convert.ToDouble(strNumberB));
                    break;
                case"_":
                    strResult=Convert.ToString(Convert.ToDouble(strNumberA)
                                               -Convert.ToDouble(strNumberB));
                    break;
                case"*":
                    strResult=Convert.ToString(Convert.ToDouble(strNumberA)
                                               *Convert.ToDouble(strNumberB));
                    break;
                case"/":
                    if(strNumberB!="O")
                        strResult=Convert.ToString(Convert.ToDouble(strNumberA)
                                                   /Convert.ToDouble(strNumberB));
                    else
                        strResult="除数不能为0";
                        break;
            }
            Console.WriteLine("结果是:"+strResult);
            Console.ReadLine();
        }
        catch (Exception ex){
            Console.WriteLine("您的输入有错:"+ex.Message);
        }
    }

}

如果需要一个新的计算器程序,怎么办?

是不是复制上边这个程序?

可以,但是如果代码很多,需要改动呢?

编程的一大原则:尽可能降低重复。

还有一个原则:尽可能讲的耦合度。

如何降低耦合度?

模块化。

一个类负责运算,另一个负责传值、获取值、显示值。这个就是封装的思想。

这也可以达到复用的目的。

现在是加减乘除都在一个类中,如果要新增一个开发操作呢?

是不是要原来的类中修改?

可能产生的问题:

  1. 加法改成减法
  2. 其他方法具体逻辑被修改
  3. ……

也就是,已经写好的代码可能会被修改,会被重新编译。

怎么办?

继承。

加法、减法……都去继承父类,父类定义两个操作数,一个运算的方法。

需要添加操作,直接继承父类就好了。

如何选择这些类?

多态。

创建工厂类,传入符号,一个类中根据符号,返回一个操作对象,编译类型是父类,运行类型是具体的操作类。

得到这个对象,调用操作方法即可。

UML 类图

统一建模语言(unified modeling language的缩写)

斜体:抽象类

<>:接口

+:public

-:private

#:protected

小妙招:
让 # 以普通字符串形式输出(不渲染标题):
1.使用转义字符 \,即:\#
2.HTML 语言:&#35;
3.`#`
继承:实线 + 空心三角

实现:虚线 + 空心三角

关联:实线 + 箭头

依赖:虚线 + 箭头

聚合:空心菱形 + 箭头

组合:实心菱形 +箭头

最后再来看下这张图,会更容易理解和记忆:

总结

设计程序要想哪些事情:
  1. 实现功能
  2. 代码规范:命名、注释
  3. 考虑异常
  4. 考虑复用、容易修改、程序运行效率

可复用:能重复利用

可维护:方便修改

可扩展:容易添加

灵活性好:能应对变化

编程之路:

画板

posted @ 2025-02-01 21:42  yx1024  阅读(28)  评论(0)    收藏  举报