> 技术文档 > c++注意点(13)----设计模式(抽象工厂)

c++注意点(13)----设计模式(抽象工厂)


创建型模式

       抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。

        简单说,它就像一个 \"超级工厂\",可以生产一整套配套的产品,而不是单一产品。比如说GUI,在windows平台使用windows风格,mac使用mac风格。

为什么需要抽象工厂模式?

以电子设备工厂为例,我们可以清晰看到为什么需要抽象工厂模式:

  1. 产品族管理:每个品牌(苹果、华为)都有一套配套产品(手机、电脑、平板),抽象工厂确保这些产品能协同工作(如生态互联)
  2. 隔离具体实现:用户不需要知道 \"iPhone 15\" 的具体细节,只需知道 \"这是苹果手机\"
  3. 轻松切换品牌:从苹果全家桶换成华为全家桶时,只需更换工厂,无需修改使用产品的代码
  4. 符合开闭原则:新增小米工厂时,无需修改现有代码,只需实现新的工厂和产品

示例

        看代码是最好理解的方法。可以看到,这里是多个工厂,每个工厂对应多个不同的设备的。

#include #include // 抽象产品:手机class Phone {public: virtual ~Phone() = default; virtual std::string getName() const = 0;};// 抽象产品:电脑class Computer {public: virtual ~Computer() = default; virtual std::string getName() const = 0;};// 抽象产品:平板class Tablet {public: virtual ~Tablet() = default; virtual std::string getName() const = 0;};// 具体产品:苹果手机class IPhone : public Phone {public: std::string getName() const override { return \"iPhone 15\"; }};// 具体产品:苹果电脑class Mac : public Computer {public: std::string getName() const override { return \"MacBook Pro\"; }};// 具体产品:苹果平板class IPad : public Tablet {public: std::string getName() const override { return \"iPad Pro\"; }};// 具体产品:华为手机class HuaweiPhone : public Phone {public: std::string getName() const override { return \"Huawei Mate 60\"; }};// 具体产品:华为电脑class HuaweiComputer : public Computer {public: std::string getName() const override { return \"Huawei MateBook X Pro\"; }};// 具体产品:华为平板class HuaweiTablet : public Tablet {public: std::string getName() const override { return \"Huawei MatePad Pro\"; }};// 抽象工厂:电子设备工厂class ElectronicFactory {public: virtual ~ElectronicFactory() = default; virtual Phone* createPhone() const = 0; virtual Computer* createComputer() const = 0; virtual Tablet* createTablet() const = 0;};// 具体工厂:苹果工厂class AppleFactory : public ElectronicFactory {public: Phone* createPhone() const override { return new IPhone(); } Computer* createComputer() const override { return new Mac(); } Tablet* createTablet() const override { return new IPad(); }};// 具体工厂:华为工厂class HuaweiFactory : public ElectronicFactory {public: Phone* createPhone() const override { return new HuaweiPhone(); } Computer* createComputer() const override { return new HuaweiComputer(); } Tablet* createTablet() const override { return new HuaweiTablet(); }};// 客户端代码:使用电子设备void useElectronicDevices(const ElectronicFactory& factory) { Phone* phone = factory.createPhone(); Computer* computer = factory.createComputer(); Tablet* tablet = factory.createTablet(); std::cout << \"使用的电子设备:\" << std::endl; std::cout << \"- 手机:\" <getName() << std::endl; std::cout << \"- 电脑:\" <getName() << std::endl; std::cout << \"- 平板:\" <getName() << std::endl; delete phone; delete computer; delete tablet;}int main() { // 使用苹果设备 std::cout << \"=== 苹果生态 ===\" << std::endl; AppleFactory appleFactory; useElectronicDevices(appleFactory); // 切换到华为设备,无需修改useElectronicDevices函数 std::cout << \"\\n=== 华为生态 ===\" << std::endl; HuaweiFactory huaweiFactory; useElectronicDevices(huaweiFactory); return 0;}

钢材价格