经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
【C++设计模式一】C++简单工厂模式
来源:cnblogs  作者:李春港  时间:2020/11/9 16:08:15  对本文有异议

(1)定义

定义一个简单工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

(2)结构

简单工厂模式有以下的结构:

  • 工厂(Factory):根据客户提供的具体产品类的参数,创建具体产品实例;
  • 抽象产品(AbstractProduct):具体产品类的基类,包含创建产品的公共方法;
  • 具体产品(ConcreteProduct):抽象产品的派生类,包含具体产品特有的实现方法,是简单工厂模式的创建目标。

(3)实例

SimpleFactory.h

  1. #ifndef SIMPLEFACTORY_H
  2. #define SIMPLEFACTORY_H
  3. #include <iostream>
  4. #include <string>
  5. //抽象产品类AbstractProduct(并非真正意义上的抽象类,含有纯虚函数才是抽象类)
  6. class AbstractSportProduct
  7. {
  8. public:
  9. AbstractSportProduct(){}
  10. ~AbstractSportProduct(){}
  11. //虚函数
  12. virtual void printName(){}
  13. virtual void play(){}
  14. };
  15. //具体产品类Basketball
  16. class Basketball :public AbstractSportProduct
  17. {
  18. public:
  19. Basketball(){}
  20. ~Basketball(){}
  21. //具体实现方法
  22. void printName();
  23. void play();
  24. };
  25. //具体产品类Football
  26. class Football :public AbstractSportProduct
  27. {
  28. public:
  29. Football(){}
  30. ~Football(){}
  31. //具体实现方法
  32. void printName();
  33. void play();
  34. };
  35. //工厂类
  36. class Factory
  37. {
  38. public:
  39. Factory(){}
  40. ~Factory(){}
  41. AbstractSportProduct *getSportProduct(std::string productName);
  42. };
  43. #endif // TSIMPLEFACTORY_H

SimpleFactory.cpp

  1. #include "SimpleFactory.h"
  2. //Basketball方法
  3. void Basketball::printName(){
  4. printf("Basketball\n");
  5. }
  6. void Basketball::play(){
  7. printf("play Basketball\n");
  8. }
  9. //Football方法
  10. void Football::printName(){
  11. printf("Football\n");
  12. }
  13. void Football::play(){
  14. printf("play Football\n");
  15. }
  16. //工厂方法
  17. AbstractSportProduct *Factory::getSportProduct(std::string productName)
  18. {
  19. AbstractSportProduct *pro = NULL;
  20. if (productName == "Basketball")
  21. {
  22. pro = new Basketball();
  23. }
  24. else if (productName == "Football")
  25. {
  26. pro = new Football();
  27. }
  28. return pro;
  29. }

main.cpp

  1. #include "SimpleFactory.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. Factory *fac = new Factory();
  5. AbstractSportProduct *product = NULL;
  6. product = fac->getSportProduct("Basketball");
  7. product->printName();
  8. product->play();
  9. product = fac->getSportProduct("Football");
  10. product->printName();
  11. product->play();
  12. return 0;
  13. }

输出结果:

(4)总结

优点:

  • 工厂类提供创建具体产品的方法,并包含一定判断逻辑,客户不必参与产品的创建过程;
  • 客户只需要知道对应产品的参数即可,参数一般简单好记,如数字、字符或者字符串等。

缺点:

  • 在扩展功能时,需要增加具体的产品类和修改工厂类,所以违背了开闭原则(对扩展开放,对修改关闭)。

(z)源码路径

gitee: https://gitee.com/CogenCG/DesignMode

原文链接:http://www.cnblogs.com/lcgbk/p/13819263.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号