C++,设计模式,【抽象工厂模式】


文章目录

  • C++设计模式:用“抽象工厂模式”打造你的万能工厂
    • 一、从早餐店说起:什么是抽象工厂?
    • 二、工厂模式的升级版:抽象工厂 vs 简单工厂
      • 1. 简单工厂(小作坊)
      • 2. 抽象工厂(连锁集团)
    • 三、游戏开发实战:跨平台UI组件
      • 1. 定义抽象产品族
      • 2. 实现具体产品(Windows风格)
      • 3. 实现具体产品(Mac风格)
      • 4. 抽象工厂接口
      • 5. 具体工厂实现
      • 6. 客户端使用
    • 四、抽象工厂的精髓
      • 1. 四大角色
      • 2. 优势所在
      • 3. 适用场景
    • 五、生活中的抽象工厂
    • 六、模式局限与应对
      • 1. 新增产品麻烦
      • 2. 过度设计风险
    • 七、代码彩蛋:现代C++实现
    • 结语:设计模式的艺术


C++设计模式:用“抽象工厂模式”打造你的万能工厂


一、从早餐店说起:什么是抽象工厂?

每天早上,你走进一家早餐店,只需要说一句:“来份经典套餐”,就能得到一杯豆浆+两根油条。第二天你换家店说同样的话,可能得到的是咖啡+牛角包。这两家店就是不同的"抽象工厂",它们都能生产"早餐组合",但具体内容却完全不同。

抽象工厂模式的核心思想:提供一个接口,用于创建一系列相关或依赖的对象,而无需指定它们的具体类。


二、工厂模式的升级版:抽象工厂 vs 简单工厂

1. 简单工厂(小作坊)

// 只能生产单一产品
class 包子工厂 {
   
public:
    包子* 制作包子(口味 type) {
   
        switch(type) {
   
            case 鲜肉: return new 鲜肉包();
            case 豆沙: return new 豆沙包();
        }
    }
};

2. 抽象工厂(连锁集团)

// 能生产整套产品线
class 早餐工厂 {
   
public:
    virtual 饮品* 做饮品() = 0;
    virtual 主食* 做主食() = 0;
};

class 中式早餐厂 : public 早餐工厂 {
   
    饮品* 做饮品() override {
    return new 豆浆(); }
    主食* 做主食() override {
    return new 油条(); }
};

class 西式早餐厂 

你可能感兴趣的:(C/C++,c++,设计模式,抽象工厂模式)