当前位置:   article > 正文

设计模式-抽象工厂模式(C++)

设计模式-抽象工厂模式(C++)

抽象工厂模式是一种设计模式,它提供了一个接口来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。下面是一个使用 C++ 实现抽象工厂模式的示例:

  1. // 抽象产品类
  2. class AbstractProductA {
  3. public:
  4. virtual void DoSomething() = 0;
  5. };
  6. class AbstractProductB {
  7. public:
  8. virtual void DoSomething() = 0;
  9. };
  10. // 抽象工厂类
  11. class AbstractFactory {
  12. public:
  13. virtual AbstractProductA* CreateProductA() = 0;
  14. virtual AbstractProductB* CreateProductB() = 0;
  15. };
  16. // 具体产品 A1 类
  17. class ConcreteProductA1 : public AbstractProductA {
  18. public:
  19. void DoSomething() override {
  20. std::cout << "ConcreteProductA1::DoSomething()" << std::endl;
  21. }
  22. };
  23. // 具体产品 A2 类
  24. class ConcreteProductA2 : public AbstractProductA {
  25. public:
  26. void DoSomething() override {
  27. std::cout << "ConcreteProductA2::DoSomething()" << std::endl;
  28. }
  29. };
  30. // 具体产品 B1 类
  31. class ConcreteProductB1 : public AbstractProductB {
  32. public:
  33. void DoSomething() override {
  34. std::cout << "ConcreteProductB1::DoSomething()" << std::endl;
  35. }
  36. };
  37. // 具体产品 B2 类
  38. class ConcreteProductB2 : public AbstractProductB {
  39. public:
  40. void DoSomething() override {
  41. std::cout << "ConcreteProductB2::DoSomething()" << std::endl;
  42. }
  43. };
  44. // 具体工厂类
  45. class ConcreteFactory1 : public AbstractFactory {
  46. public:
  47. AbstractProductA* CreateProductA() override {
  48. return new ConcreteProductA1();
  49. }
  50. AbstractProductB* CreateProductB() override {
  51. return new ConcreteProductB1();
  52. }
  53. };
  54. class ConcreteFactory2 : public AbstractFactory {
  55. public:
  56. AbstractProductA* CreateProductA() override {
  57. return new ConcreteProductA2();
  58. }
  59. AbstractProductB* CreateProductB() override {
  60. return new ConcreteProductB2();
  61. }
  62. };
  63. int main() {
  64. // 创建具体工厂对象
  65. AbstractFactory* factory1 = new ConcreteFactory1();
  66. AbstractFactory* factory2 = new ConcreteFactory2();
  67. // 通过工厂创建产品
  68. AbstractProductA* productA1 = factory1->CreateProductA();
  69. AbstractProductA* productA2 = factory2->CreateProductA();
  70. AbstractProductB* productB1 = factory1->CreateProductB();
  71. AbstractProductB* productB2 = factory2->CreateProductB();
  72. // 使用产品
  73. productA1->DoSomething();
  74. productA2->DoSomething();
  75. productB1->DoSomething();
  76. productB2->DoSomething();
  77. // 释放资源
  78. delete productA1;
  79. delete productA2;
  80. delete productB1;
  81. delete productB2;
  82. delete factory1;
  83. delete factory2;
  84. return 0;
  85. }

在上述示例中,我们定义了抽象产品 AbstractProductA 和 AbstractProductB,以及抽象工厂 AbstractFactory。具体的产品类 ConcreteProductA1ConcreteProductA2ConcreteProductB1 和 ConcreteProductB2 继承自抽象产品类,并实现了具体的功能。具体的工厂类 ConcreteFactory1 和 ConcreteFactory2 继承自抽象工厂类,并用于创建相应的具体产品。

在 main 函数中,我们创建了两个具体工厂对象 factory1 和 factory2,然后通过它们创建了具体的产品对象 productA1productA2productB1 和 productB2。最后,我们使用这些产品对象执行相应的操作。

通过抽象工厂模式,我们将产品的创建和使用分离,使得系统更加灵活和可扩展。当需要添加新的产品或工厂时,只需要添加相应的具体类并在工厂中进行实现,而不需要修改现有代码的其他部分。

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

闽ICP备14008679号