大话设计模式-简单工程模式

举报
ksh1998 发表于 2021/12/25 22:58:38 2021/12/25
【摘要】 前言: 简单工厂模式是这23个模式里的第一个模式,也是比较简单和体现非常明确的一个模式。通过简单工厂可以非常好的体验出面向对象编程的好处,面向对象概念的重要性。也算是通过这个模式体验设计模式的好处把! 目录 概念: 需求: 实现: 业务逻辑:      运算基类: 运算具体的派生类: 运算...

前言:

简单工厂模式是这23个模式里的第一个模式,也是比较简单和体现非常明确的一个模式。通过简单工厂可以非常好的体验出面向对象编程的好处,面向对象概念的重要性。也算是通过这个模式体验设计模式的好处把!

目录

概念:

需求:

实现:

业务逻辑:

     运算基类:

运算具体的派生类:

运算工厂: 

客户端:

结果:


概念:

根据客户端的选择进行动态的实例化对象,也就是根据用户的需求来实例化具体的对象。

需求:

实现一个有加减乘除的计算器,利用简单工厂模式实现。

实现:

业务逻辑:

     运算基类:


  
  1. /// <summary>
  2. /// 计算类
  3. /// </summary>
  4. public class Operation
  5. {
  6. private double _numberA = 0;
  7. private double _numberB = 0;
  8. public double NumberA
  9. {
  10. get { return _numberA; }
  11. set { _numberA = value; }
  12. }//end NumberA
  13. public double NumberB
  14. {
  15. get { return _numberB; }
  16. set { _numberB = value; }
  17. }//end NumberB
  18. //计算方法--虚方法
  19. public virtual double GetResult()
  20. {
  21. double result = 0;
  22. return result;
  23. }
  24. }//end Pperaton

运算具体的派生类:

       


  
  1. /// <summary>
  2. /// 加法运算,继承运算类。
  3. /// </summary>
  4. class OpertionAdd : Operation
  5. {
  6. //重新父类的计算方法
  7. public override double GetResult()
  8. {
  9. double result = 0;//计算结果
  10. result = NumberA + NumberB;//具体运算
  11. return result;//返回结果
  12. }//end Getresult
  13. }//end OpertonAdd
  14. /// <summary>
  15. /// 减法
  16. /// </summary>
  17. class OpertiononSub : Operation
  18. {
  19. //重新父类的计算方法
  20. public override double GetResult()
  21. {
  22. double result = 0;//计算结果
  23. result = NumberA - NumberB;//具体运算
  24. return result;//返回结果
  25. }//end Getresult
  26. }//end OPertionsub
  27. /// <summary>
  28. /// 乘法
  29. /// </summary>
  30. class OpertionMul : Operation
  31. {
  32. //重新父类的计算方法
  33. public override double GetResult()
  34. {
  35. double result = 0;//计算结果
  36. result = NumberA * NumberB;//具体运算
  37. return result;//返回结果
  38. }//end Getresult
  39. }//end OpertionMul
  40. /// <summary>
  41. /// 除法
  42. /// </summary>
  43. class OpertionDiv : Operation
  44. {
  45. //重新父类的计算方法
  46. public override double GetResult()
  47. {
  48. double result = 0;//计算结果
  49. if (NumberB == 0)
  50. throw new Exception("除数不能为0.");
  51. result = NumberA / NumberB;//具体运算
  52. return result;//返回结果
  53. }//end Getresult
  54. }
  55. //end OpertionDiv

运算工厂: 


  
  1. /// <summary>
  2. /// 简单工厂类,根据需求实例化类。
  3. /// </summary>
  4. public class OperationFactory
  5. {
  6. /// <summary>
  7. /// 实例化具体的运算类
  8. /// </summary>
  9. /// <param name="operate">运算符</param>
  10. /// <returns>返回具体实例化的类</returns>
  11. public static Operation createOperate(string operate)
  12. {
  13. Operation oper = null;//实例化父类,从新赋值。
  14. //判断
  15. switch (operate)
  16. {
  17. case "+":
  18. //把父类,转换成子类
  19. oper = new OpertionAdd();//实例化加法类
  20. break;
  21. case "-":
  22. //把父类,转换成子类
  23. oper = new OpertiononSub();//实例化减法类
  24. break;
  25. case "*":
  26. //把父类,转换成子类
  27. oper = new OpertionMul();//实例化乘法类
  28. break;
  29. case "/":
  30. //把父类,转换成子类
  31. oper = new OpertionDiv();//实例化除法类
  32. break;
  33. }//end swithc
  34. //返回结果
  35. return oper;
  36. }
  37. }//end OperationFactory

客户端:


  
  1. //确定按钮
  2. private void button1_Click(object sender, EventArgs e)
  3. { //运算类
  4. Operation ope;
  5. //从新给父类,赋值。
  6. ope = OperationFactory.createOperate(txt2.Text); //运算符
  7. ope.NumberA = int.Parse(txt1.Text);//给A赋值
  8. ope.NumberB =int.Parse( txt3.Text);//给B赋值
  9. //调用计算方法,输出结果。
  10. double result = ope.GetResult();
  11. txt4.Text = result.ToString();
  12. }

 

结果:

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/102934662

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。