面向对象设计模式之产品工厂模式

快来打我* 2023-07-24 14:40 137阅读 0赞

自己也是编了很多年的程序了,之前很多时候都是面向过程和面向实现编程的,做算法研究还行,但做稍大点的应用程序就感觉很多时候做了很多的重复工作。这些工作大多时候都是相同的代码,只是稍微改动变量,同时这些重复工作让程序的逻辑变得非常复杂,非常容易隐藏BUG!!!

参考文章链接:https://blog.csdn.net/CoderAldrich/article/details/83272866

1.三种产品工厂模式的简介

简单工厂模式:如下图所示,有多个操作(ProductA,ProductB,ProductC的show())可供选择,初始化的时候需要决定Factory内是什么具体的操作。

70

工厂方法模式:在简单工厂模式下,需要再加一个操作(ProductB的show())。为了不影响前面简单工厂模式的代码,需要

不同的工厂有一个父类。这个父类的虚函数是构建不同的子类。不同的产品有一个父类。这个父类的虚函数是构建不同的操作。真正的使用方法,再构建的时候用不同的此类构建对象。然后给对象根据不同的操作进行初始化。

70 1

抽象工厂模式:工厂方法模式虽然可以在不影响之前代码的基础上新增功能。但随着功能增加的越来越多,管理起来也越来越麻烦了。

70 2

2.三种产品工厂模式的具体实现

简单工厂模式的具体实现为:创造一个产品父类,操作作为它的虚函数。不同的产品子类,重写这个虚函数。然后另外创造一个工厂类,通过输入参数来决定工厂中的产品初始化为哪一个产品子类。

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. typedef enum ProductTypeTag
  5. {
  6. TypeA,
  7. TypeB,
  8. TypeC
  9. }PRODUCTTYPE;
  10. // Here is the product class
  11. class Product
  12. {
  13. public:
  14. virtual void Show() = 0;
  15. };
  16. class ProductA : public Product
  17. {
  18. public:
  19. void Show()
  20. {
  21. cout<<"I'm ProductA"<<endl;
  22. }
  23. };
  24. class ProductB : public Product
  25. {
  26. public:
  27. void Show()
  28. {
  29. cout<<"I'm ProductB"<<endl;
  30. }
  31. };
  32. class ProductC : public Product
  33. {
  34. public:
  35. void Show()
  36. {
  37. cout<<"I'm ProductC"<<endl;
  38. }
  39. };
  40. // Here is the Factory class
  41. class Factory
  42. {
  43. public:
  44. Product* CreateProduct(PRODUCTTYPE type)
  45. {
  46. switch (type)
  47. {
  48. case TypeA:
  49. return new ProductA();
  50. case TypeB:
  51. return new ProductB();
  52. case TypeC:
  53. return new ProductC();
  54. default:
  55. return NULL;
  56. }
  57. }
  58. };
  59. int main(int argc, char *argv[])
  60. {
  61. // First, create a factory object
  62. Factory *ProductFactory = new Factory();
  63. Product *productObjA = ProductFactory->CreateProduct(TypeA);
  64. if (productObjA != NULL)
  65. productObjA->Show();
  66. Product *productObjB = ProductFactory->CreateProduct(TypeB);
  67. if (productObjB != NULL)
  68. productObjB->Show();
  69. Product *productObjC = ProductFactory->CreateProduct(TypeC);
  70. if (productObjC != NULL)
  71. productObjC->Show();
  72. delete ProductFactory;
  73. ProductFactory = NULL;
  74. delete productObjA;
  75. productObjA = NULL;
  76. delete productObjB;
  77. productObjB = NULL;
  78. delete productObjC;
  79. productObjC = NULL;
  80. return 0;
  81. }

发表评论

表情:
评论列表 (有 0 条评论,137人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计模式工厂模式

    最近在重新学习设计模式,将自己的总结的内容写在博客上以便复习巩固 最先开始的是最初级的工厂设计模式 1. 简单工厂模式     简单工厂模式实际上就是利用简单的if..e

    相关 设计模式工厂模式

    工厂模式 属于创建型模式,它提供了一种创建对象的最佳方式。需要生成的对象叫做产品 ,生成对象的地方叫做工厂 。 场景: 解耦合,提高代码灵活性和可扩展性。

    相关 设计模式工厂模式

    模式描述:提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个产品类,并且由该实现类创建对应的产品实例。 工厂方法模式: 一个抽象产品类,可以派

    相关 设计模式工厂模式

    设计模式--工厂模式 在软件系统中,经常面临着“某个对象”由于需求的变化,对象的具体实现面临着剧烈的变化。为了应对这种变化我们抽象出它比较稳定的接口,隔离出“这个易变对象