设计模式:工厂模式

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

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;
}
相关推荐
AM越.1 天前
Java设计模式超详解--观察者设计模式
java·开发语言·设计模式
ezreal_pan1 天前
基于券类型路由的渐进式重构:函数式选项模式与管道模式的完美结合
设计模式·重构·golang·选项函数
有一个好名字1 天前
设计模式-单例模式
java·单例模式·设计模式
赵得C1 天前
2025下半年软件设计师考前几页纸
java·开发语言·分布式·设计模式·性能优化·软考·软件设计师
alibli1 天前
Alibli深度理解设计模式系列教程
c++·设计模式
老朱佩琪!1 天前
Unity迭代器模式
unity·设计模式·迭代器模式
是2的10次方啊1 天前
🎭 程序员的一天:12种设计模式藏在你身边
设计模式
郝学胜-神的一滴1 天前
使用Qt OpenGL开发俄罗斯方块:从零到一实现经典游戏
c++·qt·程序人生·游戏·设计模式·系统架构·图形渲染
明洞日记1 天前
【设计模式手册018】访问者模式 - 分离数据结构与操作
数据结构·设计模式·访问者模式
有一个好名字1 天前
设计模式-适配器模式
设计模式·适配器模式