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 @   yx1024  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示