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); } } }
如果需要一个新的计算器程序,怎么办?
是不是复制上边这个程序?
可以,但是如果代码很多,需要改动呢?
编程的一大原则:尽可能降低重复。
还有一个原则:尽可能讲的耦合度。
如何降低耦合度?
模块化。
一个类负责运算,另一个负责传值、获取值、显示值。这个就是封装的思想。
这也可以达到复用的目的。
现在是加减乘除都在一个类中,如果要新增一个开发操作呢?
是不是要原来的类中修改?
可能产生的问题:
- 加法改成减法
- 其他方法具体逻辑被修改
- ……
也就是,已经写好的代码可能会被修改,会被重新编译。
怎么办?
继承。
加法、减法……都去继承父类,父类定义两个操作数,一个运算的方法。
需要添加操作,直接继承父类就好了。
如何选择这些类?
多态。
创建工厂类,传入符号,一个类中根据符号,返回一个操作对象,编译类型是父类,运行类型是具体的操作类。
得到这个对象,调用操作方法即可。
UML 类图
统一建模语言(unified modeling language的缩写)斜体:抽象类
<
+:public
-:private
#:protected
小妙招: 让 # 以普通字符串形式输出(不渲染标题): 1.使用转义字符 \,即:\# 2.HTML 语言:# 3.`#`
继承:实线 + 空心三角
实现:虚线 + 空心三角
关联:实线 + 箭头
依赖:虚线 + 箭头
聚合:空心菱形 + 箭头
组合:实心菱形 +箭头
最后再来看下这张图,会更容易理解和记忆:
总结
设计程序要想哪些事情:- 实现功能
- 代码规范:命名、注释
- 考虑异常
- 考虑复用、容易修改、程序运行效率
可复用:能重复利用
可维护:方便修改
可扩展:容易添加
灵活性好:能应对变化
编程之路:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10亿数据,如何做迁移?
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 易语言 —— 开山篇
· Trae初体验