设计模式:工厂模式

工厂模式是将对象的创建过程以及使用过承诺分离,这样可以在不改变客户端代码的前提下增加新的产品类型。主要介绍抽象工厂的设计模式,我的理解主要是把创建对象的过程再抽象为一个抽象类,然后不同的工厂就对这个总的抽象类进行重写。其实就是多态再多态。

cpp 复制代码
#include <iostream>

// 抽象产品 Car
class Car {
public:
    virtual void show() = 0;
};

// 抽象产品 Tire
class Tire {
public:
    virtual void show() = 0;
};

// 具体产品 BMWCar
class BMWCar : public Car {
public:
    void show() override {
        std::cout << "This is a BMW car." << std::endl;
    }
};

// 具体产品 BMWTire
class BMWTire : public Tire {
public:
    void show() override {
        std::cout << "This is a BMW tire." << std::endl;
    }
};

// 具体产品 AudiCar
class AudiCar : public Car {
public:
    void show() override {
        std::cout << "This is an Audi car." << std::endl;
    }
};

// 具体产品 AudiTire
class AudiTire : public Tire {
public:
    void show() override {
        std::cout << "This is an Audi tire." << std::endl;
    }
};

// 抽象工厂类
class AbstractFactory {
public:
    virtual Car* createCar() = 0;
    virtual Tire* createTire() = 0;
};

// 具体工厂 BMWFactory
class BMWFactory : public AbstractFactory {
public:
    Car* createCar() override {
        return new BMWCar();
    }

    Tire* createTire() override {
        return new BMWTire();
    }
};

// 具体工厂 AudiFactory
class AudiFactory : public AbstractFactory {
public:
    Car* createCar() override {
        return new AudiCar();
    }

    Tire* createTire() override {
        return new AudiTire();
    }
};

// 测试代码
int main() {
    // 创建 BMW 工厂
    AbstractFactory* bmwFactory = new BMWFactory();
    Car* bmwCar = bmwFactory->createCar();
    Tire* bmwTire = bmwFactory->createTire();
    bmwCar->show();
    bmwTire->show();
    delete bmwCar;
    delete bmwTire;
    delete bmwFactory;

    // 创建 Audi 工厂
    AbstractFactory* audiFactory = new AudiFactory();
    Car* audiCar = audiFactory->createCar();
    Tire* audiTire = audiFactory->createTire();
    audiCar->show();
    audiTire->show();
    delete audiCar;
    delete audiTire;
    delete audiFactory;

    return 0;
}
相关推荐
GISer_Jing14 小时前
AI:多智能体协作与记忆管理
人工智能·设计模式·aigc
雨中飘荡的记忆16 小时前
责任链模式实战应用:从理论到生产实践
设计模式
沛沛老爹18 小时前
Web开发者进阶AI:Agent技能设计模式之迭代分析与上下文聚合实战
前端·人工智能·设计模式
Geoking.20 小时前
【设计模式】装饰者模式详解
设计模式·装饰器模式
vx-bot55566621 小时前
企业微信接口在自动化工作流中的关键角色与设计模式
设计模式·自动化·企业微信
Yu_Lijing1 天前
基于C++的《Head First设计模式》笔记——工厂模式
c++·笔记·设计模式
HL_风神1 天前
设计原则之迪米特
c++·学习·设计模式
HL_风神1 天前
设计原则之合成复用
c++·学习·设计模式
Aeside12 天前
揭秘 Nginx 百万并发基石:Reactor 架构与 Epoll 底层原理
后端·设计模式
帅气的你2 天前
从零封装一个通用的 API 接口返回类:统一前后端交互格式
java·设计模式