当前位置:   article > 正文

C++设计模式-工厂模式_c++工厂模式

c++工厂模式

目录

 

 

基本概念

代码及实例


 

基本概念

工厂方法模式(Factory Method):定义一个用于创建对象的接口,让字类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类;

简单工厂模式的最大优点在用户工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了具体产品的依赖。

工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂内部逻辑判断移到了客户端代码来进行。

UML图如下(这里以计算器为例)

 

代码及实例

程序运行截图如下:

源码如下:

Head.h

  1. #ifndef HEAD_H
  2. #define HEAD_H
  3. //运算相关
  4. class Operation{
  5. public:
  6. double m_numberA;
  7. double m_numberB;
  8. virtual double getResult();
  9. };
  10. class AddOperation: public Operation{
  11. public:
  12. AddOperation();
  13. double getResult();
  14. };
  15. class MultiOperation: public Operation{
  16. public:
  17. MultiOperation();
  18. double getResult();
  19. };
  20. //工厂相关
  21. class IFactory{
  22. public:
  23. virtual Operation *createOperation();
  24. };
  25. class AddFactory: public IFactory{
  26. public:
  27. Operation *createOperation();
  28. };
  29. class MultiFactory: public IFactory{
  30. public:
  31. Operation *createOperation();
  32. };
  33. #endif //HEAD_H

Head.cpp

  1. #include "Head.h"
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. Operation *IFactory::createOperation()
  6. {
  7. return nullptr;
  8. }
  9. Operation *AddFactory::createOperation()
  10. {
  11. return new AddOperation;
  12. }
  13. double Operation::getResult()
  14. {
  15. return -1;
  16. }
  17. AddOperation::AddOperation()
  18. {
  19. m_numberA = 0.0;
  20. m_numberB = 0.0;
  21. }
  22. double AddOperation::getResult()
  23. {
  24. return m_numberA + m_numberB;
  25. }
  26. MultiOperation::MultiOperation()
  27. {
  28. m_numberA = 0.0;
  29. m_numberB = 0.0;
  30. }
  31. double MultiOperation::getResult()
  32. {
  33. return m_numberA * m_numberB;
  34. }
  35. Operation * MultiFactory::createOperation()
  36. {
  37. return new MultiOperation;
  38. }

main.cpp

  1. #include "Head.h"
  2. #include <iostream>
  3. using namespace std;
  4. int main(int *argc, int *argv){
  5. IFactory *operAddFactory = new AddFactory;
  6. Operation *addOper = operAddFactory->createOperation();
  7. addOper->m_numberA = 100;
  8. addOper->m_numberB = 200;
  9. cout << "operAddFactory result is : " << addOper->getResult() << endl;
  10. delete operAddFactory;
  11. delete addOper;
  12. cout << "--------------- 华丽的分割线 ---------------" << endl;
  13. IFactory *operMultiFactory = new MultiFactory;
  14. Operation *multiOper = operMultiFactory->createOperation();
  15. multiOper->m_numberA = 12;
  16. multiOper->m_numberB = 5;
  17. cout << "operMultiFactory result is : " << multiOper->getResult() << endl;
  18. delete operMultiFactory;
  19. delete multiOper;
  20. getchar();
  21. return 0;
  22. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/847637
推荐阅读
相关标签
  

闽ICP备14008679号