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


    目录

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

    一、意图

    二、适用性

    三、结构

    四、参与者

    五、代码


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

    一、意图

    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    二、适用性

    • 一个系统要独立于它的产品的创建、组合和表示时。
    • 一个系统要由多个产品系列中的一个来配置时。
    • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
    • 当你提供一个产品类库,而只想显示它们的接口而不是实现时。

    三、结构

     

    四、参与者

    • AbstractFactory

           声明一个创建抽象产品对象的操作接口。

    • ConcreteFactory

            实现创建具体产品对象的操作。

    • AbstractProduct

            为一类产品对象声明一个接口。

    • ConcreteProduct

            定义一个将被相应的具体工厂创建的产品对象。

            实现AbstractProduct接口。

    • Client

            仅使用由AbstractFactory和AbstractProduct类声明的接口。

    五、代码

    1. #include
    2. using namespace std;
    3. class AbstractProduct {
    4. public:
    5. virtual void ShowInformation() = 0;
    6. };
    7. class AbstractProductA : public AbstractProduct {};
    8. class ProductA1 : public AbstractProductA {
    9. public:
    10. void ShowInformation() {
    11. cout << "ProductA1 Information" << endl;
    12. }
    13. };
    14. class ProductA2 : public AbstractProductA {
    15. public:
    16. void ShowInformation() {
    17. cout << "ProductA2 Information" << endl;
    18. }
    19. };
    20. class AbstractProductB : public AbstractProduct {};
    21. class ProductB1 : public AbstractProductB {
    22. public:
    23. void ShowInformation() {
    24. cout << "ProductB1 Information" << endl;
    25. }
    26. };
    27. class ProductB2 : public AbstractProductB {
    28. public:
    29. void ShowInformation() {
    30. cout << "ProductB2 Information" << endl;
    31. }
    32. };
    33. class AbstractFactory {
    34. public:
    35. virtual AbstractProductA* CreateProductA() = 0;
    36. virtual AbstractProductB* CreateProductB() = 0;
    37. };
    38. class FactoryOne : public AbstractFactory {
    39. public:
    40. AbstractProductA* CreateProductA() {
    41. return new ProductA1;
    42. }
    43. AbstractProductB* CreateProductB() {
    44. return new ProductB1;
    45. }
    46. };
    47. class FactoryTwo : public AbstractFactory {
    48. public:
    49. AbstractProductA* CreateProductA() {
    50. return new ProductA2;
    51. }
    52. AbstractProductB* CreateProductB() {
    53. return new ProductB2;
    54. }
    55. };
    56. int main() {
    57. AbstractFactory* factoryOne = new FactoryOne;
    58. AbstractProduct* productA1 = factoryOne->CreateProductA();
    59. AbstractProduct* productB1 = factoryOne->CreateProductB();
    60. productA1->ShowInformation();
    61. productB1->ShowInformation();
    62. AbstractFactory* factoryTwo = new FactoryTwo;
    63. AbstractProduct* productA2 = factoryTwo->CreateProductA();
    64. AbstractProduct* productB2 = factoryTwo->CreateProductB();
    65. productA2->ShowInformation();
    66. productB2->ShowInformation();
    67. return 0;
    68. }

  • 相关阅读:
    达梦数据库使用中遇到的问题和解决方案
    骰子游戏-第11届蓝桥杯Scratch选拔赛真题精选
    数据结构 每日一练 :选择 + 编程
    [iOS开发]iOS中的相关锁
    vue3 生命周期函数,都改了啥?
    音视频项目—基于FFmpeg和SDL的音视频播放器解析(十五)
    [附源码]计算机毕业设计云南美食管理系统Springboot程序
    React-Router之BrowserRouter 与 HashRouter切分方式和基本概念
    TensorFlow 的基本概念和使用场景介绍
    【USRP】软件无线电基础篇:美国完整的军用通信系统
  • 原文地址:https://blog.csdn.net/qq_40660998/article/details/133579659