• 《工厂模式(极简c++)》


            本文章属于专栏《设计模式(极简c++版)》


            继续上一篇《设计原则》。本章简要说明工厂模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。

    • 模式说明
      • 简单工厂模式
        • 方案:对象不直接new,而是通过另一个类(工厂)的接口生产
        • 优点:保证了创建行为的一致,降低维护成本
        • 缺点:所有对象在一个类中创建,修改影响面太大
      • 工厂方法模式
        • 方案:每个类有独立的工厂类
        • 优点:修改影响小
        • 缺点:工厂类太多,维护成本高
      • 抽象工厂模式
        • 方案:类似的工厂继承一个Base工厂
        • 优点:降低了工厂类的数量(本质是把有相同语义和行为的逻辑,放到Base工厂中,方便管理)
        • 缺点:对开发人员的业务理解要求高
    • 本质思想:把类似的创建逻辑的封装在一个接口里、把有接口中类似的创建逻辑,再封装到更基础的接口或类中,以此类推。
    • 实践建议:一个工厂生产所有类,当类变多时。增加工厂,每个工厂放有共性的类。当工厂太多时,把有共同行为的工厂逻辑,放到一个Base工厂中。每个阶段,只有到一定的量,才有类似可言,不要一开始盲目地封装,那会增加系统的复杂度,并降低可读性。

    抽象工厂类代码示例

    1. #include
    2. #include
    3. // 抽象产品 Bird
    4. class Bird {
    5. public:
    6. virtual void sound() = 0;
    7. virtual ~Bird() {} // 虚析构函数
    8. };
    9. // 具体产品 Sparrow
    10. class Sparrow : public Bird {
    11. public:
    12. void sound() override {
    13. std::cout << "Chirp chirp!" << std::endl;
    14. }
    15. };
    16. // 具体产品 Penguin
    17. class Penguin : public Bird {
    18. public:
    19. void sound() override {
    20. std::cout << "Squawk squawk!" << std::endl;
    21. }
    22. };
    23. // 抽象工厂 BirdFactory
    24. class BirdFactory {
    25. public:
    26. virtual std::unique_ptr createBird() = 0;
    27. virtual ~BirdFactory() {} // 虚析构函数
    28. };
    29. // 具体工厂 SparrowFactory
    30. class SparrowFactory : public BirdFactory {
    31. public:
    32. std::unique_ptr createBird() override {
    33. return std::unique_ptr(new Sparrow());
    34. }
    35. };
    36. // 具体工厂 PenguinFactory
    37. class PenguinFactory : public BirdFactory {
    38. public:
    39. std::unique_ptr createBird() override {
    40. return std::unique_ptr(new Penguin());
    41. }
    42. };
    43. int main() {
    44. // 使用 SparrowFactory 创建 Sparrow 实例
    45. std::unique_ptr sparrowFactory(new SparrowFactory());
    46. std::unique_ptr sparrow = sparrowFactory->createBird();
    47. sparrow->sound(); // 输出:Chirp chirp!
    48. // 使用 PenguinFactory 创建 Penguin 实例
    49. std::unique_ptr penguinFactory(new PenguinFactory());
    50. std::unique_ptr penguin = penguinFactory->createBird();
    51. penguin->sound(); // 输出:Squawk squawk!
    52. return 0;
    53. }

  • 相关阅读:
    【BI报表】Superset二开相关接口文档
    Python自动操作 GUI 神器:PyAutoGUI
    前端工作总结246-uni-切换tabber修改状态修饰
    2024法定节假日|除夕不放假?企业这样做员工更满意
    Read Uncommitted
    2022杭电多校赛第八场
    【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
    TypeError: argument should be integer or bytes-like object, not ‘str‘
    闪存基本原理
    Python学习:构造函数与析构函数
  • 原文地址:https://blog.csdn.net/ly52352148/article/details/136760886