• 简单工程模式


    代码实现 
    1. //simpleFactory.h
    2. #ifndef _SimpleFactory_H_
    3. #define _SimpleFactory_H_
    4. #include
    5. #include
    6. #include
    7. using namespace std;
    8. class Operation {
    9. protected:
    10. double _numberA = 0;
    11. double _numberB = 0;
    12. public:
    13. Operation() {}
    14. Operation(double a, double b) {
    15. _numberA = a;
    16. _numberB = b;
    17. }
    18. Operation& operator=(Operation& p) {
    19. _numberA = p.getNumberA();
    20. _numberB = p.getNumberB();
    21. }
    22. double getNumberA() {
    23. return _numberA;
    24. }
    25. void setNumberA(double value) {
    26. _numberA = value;
    27. }
    28. double getNumberB() {
    29. return _numberB;
    30. }
    31. void setNumberB(double value) {
    32. _numberB = value;
    33. }
    34. virtual double GetResult() {
    35. return 0;
    36. }
    37. };
    38. class OperationAdd :public Operation {
    39. double GetResult() {
    40. double result = 0;
    41. result = _numberA + _numberB;
    42. return result;
    43. }
    44. };
    45. class OperationSub :public Operation {
    46. double GetResult() {
    47. double result = 0;
    48. result = _numberA - _numberB;
    49. return result;
    50. }
    51. };
    52. class OperationMul :public Operation {
    53. double GetResult() {
    54. double result = 0;
    55. result = _numberA * _numberB;
    56. return result;
    57. }
    58. };
    59. class OperationDiv :public Operation {
    60. double GetResult() {
    61. double result = 0;
    62. try {
    63. result = _numberA / _numberB;
    64. }
    65. catch (exception&) {
    66. cout << "发生除0异常" << endl;
    67. }
    68. return result;
    69. }
    70. };
    71. class OperationFactory {
    72. public:
    73. static Operation* createOperation(char operate) {
    74. Operation* oper;
    75. switch (operate) {
    76. case '+':
    77. oper = new OperationAdd();
    78. break;
    79. case '-':
    80. oper = new OperationSub();
    81. break;
    82. case '*':
    83. oper = new OperationMul();
    84. break;
    85. case '/':
    86. oper = new OperationDiv();
    87. break;
    88. }
    89. return oper;
    90. }
    91. };
    92. #endif //_SimpleFactory_H_

    UML图

    总结

    可以发现,简单工厂类是制造运算类的对象的,并且只需要传递关键参数给简单工厂类的方法(通常为静态方法),就可以创造出相应的对象出来。
    故简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象不需要关心。

    收获

    1.可以通过封装、继承、多态把程序的耦合度降低。
    2.可以通过设计模式使程序变得更加灵活,易于修改,并且易于复用。
    3.简单工厂模式适用创建对象少的情况,需要传参来指定需要的对象(产品)。

  • 相关阅读:
    设计模式:工程模式
    寻找可靠的软件外包开发公司
    LINUX NVME SSD 大容量存储设计
    官宣|Apache Flink 1.20 发布公告
    css进阶知识点速览
    Java面试题之Java的IO
    PCB电路设计规范细节
    电商API:淘宝京东拼多多1688多电商平台的商品销量库存信息获取
    机器学习中的 K-均值聚类算法及其优缺点。
    Laravel系列开源Dcat admin礼盒商城后台管理项目
  • 原文地址:https://blog.csdn.net/qq_40179458/article/details/134503959