当前位置: 首页 > 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;}}

相关文章:

  • CST软件基础六:视图
  • 热点│衰老过程中的表观遗传调控
  • QT-VStudio2107加载项目,报出“元素 <LanguageStandard>只有无效值“Default“”
  • Cat.4+WiFi6工业路由器介绍小体积大作用ER4200
  • 【Hadoop】大数据技术之 HDFS
  • vite学习笔记
  • 阿里云API RAG全流程实战:从模型调用到多模态应用的完整技术链路
  • 阿里云ecs如何禁用ip的访问
  • 【CSS学习笔记1】css基础知识介绍
  • 【软考向】Chapter 11 标准化和软件知识产权基础知识
  • 什么是nginx的异步非阻塞
  • 每日c/c++题 备战蓝桥杯(修理牛棚 Barn Repair)
  • voc怎么转yolo,如何分割数据集为验证集,怎样检测CUDA可用性 并使用yolov8训练安全帽数据集且构建基于yolov8深度学习的安全帽检测系统
  • upload-labs通关笔记-第19关文件上传之条件竞争
  • Fastjson利用链JdbcRowSetImpl分析
  • 多维数据助力企业网络安全
  • 2025年最新基于Vue基础项目Todolist任务编辑器【适合新手入手】【有这一片足够了】【附源码】
  • 基于 SpringBoot + Vue 的海滨体育馆管理系统设计与实现
  • Gmsh 代码深度解析与应用实例
  • 【数据架构04】数据湖架构篇
  • 网站备案快吗/深圳推广公司哪家最好
  • 南山做网站的/谷歌seo关键词排名优化
  • wordpress 远程/优化公司组织架构
  • 南山做网站多少钱/最新推广赚钱的app
  • 沈阳做企业网站/网站查询ip
  • wordpress调用搜索功能/seo课程在哪培训好