当前位置: 首页 > news >正文

设计模式——简单工厂模式

文章目录

  • 面向对象——如:活字印刷术 封装、继承、多态
  • 松耦合——业务逻辑与界面逻辑分离——简单工厂模式
    • 紧耦合举例
    • 松耦合举例——简单工厂模式

面向对象——如:活字印刷术 封装、继承、多态

通过面向对象的三大特性:封装、继承、多态 降低程序耦合度。使得程序易维护、易扩展、易复用

松耦合——业务逻辑与界面逻辑分离——简单工厂模式

例如构建一个计算器功能:
1.根据计算方式,只编译该类型与方法,而不是编译所有,易于维护。例如:使用加法运算只编译加法运算而不是所有运算。
2.添加其他运算方式。例如添加次方运算,不用给工程师整个代码,发生其他计算方式代码误操作、更改、泄密等其他情况。
以下分别举例紧耦合案列、松耦合案例:

紧耦合举例

所有方法汇总在一起,导致计算时需要全部加载

       public void TryCal(){try{//输入数字A:string strNumberA = numberA.Text;//请选择运算符号(+、-、*、/)string strOperate = numberO.Text;//请输入数字B:string strNumberB = numberB.Text;numberR.Text = operation.GetResult(Convert.ToDouble(strNumberA), Convert.ToDouble(strNumberB), strOperate).ToString();}catch (Exception er){LBError.Content = er.Message.ToString();}}public class operation{public static double GetResult(double A, double B, string operatesign){double result = 0d;switch (operatesign){case "+":result = A + B;break;case "-":result = A - B;break;case "*":result = A * B;break;case "/":result = A / B;break;default:break;}return result;}}private void numberR_KeyDown(object sender, KeyEventArgs e){if (e.Key==Key.Enter){TryCal();}}

松耦合举例——简单工厂模式

利用简单工厂模式,根据条件实例化对象,避免增加不必要的实例化对象。

       public void TryCall_Factory(){try{operationL opel = OperationFactory.createOperate(numberO.Text);opel.NumberA = Convert.ToDouble(numberA.Text);opel.NumberB = Convert.ToDouble(numberB.Text);numberR.Text = opel.Getresult().ToString();}catch (Exception er){LBError.Content = er.Message.ToString();}}public class OperationFactory{public static operationL createOperate(string operatestr){operationL operation = null;switch (operatestr){case "+":operation = new OperationAdd();break;case "-":operation = new OperationSub();break;case "*":operation = new OperationMul();break;case "/":operation = new OperationDiv();break;}return operation;}}public class operationL{private Double _numberA;public Double NumberA{get { return _numberA; }set { _numberA = value; }}private Double _numberB;public Double NumberB{get { return _numberB; }set { _numberB = value; }}public virtual Double Getresult(){double result = 0d;return result;}}public class OperationAdd:operationL{public override double Getresult(){double result = 0d;result = NumberA + NumberB;return result;}}public class OperationSub : operationL{public override double Getresult(){double result = 0d;result = NumberA - NumberB;return result;}}public class OperationMul : operationL{public override double Getresult(){double result = 0d;result = NumberA* NumberB;return result;}}public class OperationDiv : operationL{public override double Getresult(){double result = 0d;if (NumberB == 0)throw new Exception("除数不能为0");result = NumberA /NumberB;return result;}}
http://www.xdnf.cn/news/614251.html

相关文章:

  • Zabbix实践!客户端自动发现
  • c++ constexpr关键字
  • VSCode如何像Pycharm一样“““回车快速生成函数注释文档?如何设置文档的样式?autoDocstring如何设置自定义模板?
  • RNN GRU LSTM 模型理解
  • 深度“求索”:DeepSeek+Dify构建个人知识库
  • SkyWalking高频采集泄漏线程导致CPU满载排查思路
  • RV1126 音频AI模块的详解
  • 树莓派4B搭建Hector SLAM算法, ROS1 ROS2?
  • 淘宝卖家评价等级如何区分?如何提升信誉等级?
  • 数据结构 -- 插入排序(直接插入排序和希尔排序)
  • 告别手抖困扰:全方位健康护理指南
  • React从基础入门到高级实战:React 基础入门 - 状态与事件处理
  • 量化交易新时代:Tick数据与股票API的完美融合
  • Python set集合方法详解
  • 无法选择最佳操作符(APP) 目录
  • 8级-数组
  • Axure元件动作五:设置列表选中项
  • Java SpringBoot 扣子CozeAI SseEmitter流式对话完整实战 打字机效果
  • 211. 添加与搜索单词 - 数据结构设计
  • 【Qt开发】按钮类控件
  • 5.24 note
  • FFmpeg 安装包全攻略:gpl、lgpl、shared、master 区别详解
  • spring注解旁路问题讨论
  • 使用Python在PowerPoint中插入形状(Shape)
  • 技术文档的进阶之旅
  • 文章记单词 | 第107篇(六级)
  • 3par persona设置错误,linux I/O持续报错
  • mPLUG-Owl3图片描述
  • SQL实战之索引优化(单表、双表、三表、索引失效)
  • FFplay 播放原始数据