大话设计模式读书笔记1——简单工厂模式
最近几日,重温了一下《大话设计模式》这本书,当时读的仓促,有很多没有注意的地方,现在仔细翻看起来,发现这值得细细品味的一本书!!
好东西就要记下来!!!
第一章笔记:从一个简单的计算器程序来看简单工厂模式。
变化的地方就要封装,用一个单独的类来做创造实例的过程这就是工厂。
UML图:
/// <summary> /// 运算类 /// </summary> public class Operation { public double Number1 { get; set; } public double Number2 { get; set; } public virtual double GetResult() { double result = 0; return result; } }
/// <summary> /// 加法类 /// </summary> public class OprerationAdd : Operation { public override double GetResult() { double reslut = 0; reslut = Number1 + Number2; return reslut; } } /// <summary> /// 减法类 /// </summary> public class OprerationSub : Operation { public override double GetResult() { double reslut = 0; reslut = Number1 - Number2; return reslut; } } /// <summary> /// 乘法类 /// </summary> public class OprerationMul : Operation { public override double GetResult() { double reslut = 0; reslut = Number1 * Number2; return reslut; } } /// <summary> /// 除法类 /// </summary> public class OprerationDiv : Operation { public override double GetResult() { double reslut = 0; if (Number2==0) { throw new Exception("除数不能等于0"); } reslut = Number1 / Number2; return reslut; } }
运算工厂类:
public class OperationFactory { public static Operation CreateOperate(string oper) { Operation operation = null; switch (oper) { case "+": operation = new OprerationAdd(); break; case "-": operation = new OprerationSub(); break; case "*": operation = new OprerationMul(); break; case "/": operation = new OprerationDiv(); break; } return operation; } }
客户端代码:
public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); this.cbxOper.SelectedIndex = 0; } /// <summary> /// 运算点击 /// </summary> private void btnCompute_Click(object sender, EventArgs e) { double num1 = 0; double num2 = 0; if (!double.TryParse(this.txtNum1.Text,out num1)) { this.lblInfo.Text = "请输入正确的数字"; this.txtNum1.Focus(); return; } if (!double.TryParse(this.txtNum2.Text, out num2)) { this.lblInfo.Text = "请输入正确的数字"; this.txtNum2.Focus(); return; } Operation operation = null; operation = OperationFactory.CreateOperate(this.cbxOper.Text); operation.Number1 = num1; operation.Number2 = num2; double ret = operation.GetResult(); this.txtResult.Text = ret.ToString(); } }
界面显示:
作者:Rising Sun
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
分类:
设计模式读书笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库