设计模式:工厂模式

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

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;
}
相关推荐
星空寻流年3 小时前
设计模式第五章(门面模式)
android·设计模式
大飞pkz5 小时前
【设计模式】策略模式
开发语言·设计模式·c#·策略模式
yujkss5 小时前
23种设计模式之【状态机模式】-核心原理与 Java实践
java·ui·设计模式
bkspiderx11 小时前
C++设计模式之行为型模式:职责链模式(Chain of Responsibility)
c++·设计模式·责任链模式
青草地溪水旁12 小时前
设计模式(C++)详解——迭代器模式(4)
c++·设计模式·迭代器模式
大飞pkz12 小时前
【设计模式】状态模式
开发语言·设计模式·c#·状态模式
笨手笨脚の12 小时前
设计模式-建造者模式
java·设计模式·建造者模式·创建型设计模式
charlie11451419112 小时前
精读C++20设计模式——创造型设计模式:单例模式
c++·学习·单例模式·设计模式·c++20
1710orange13 小时前
java设计模式:工厂方法 + 建造者模式
java·设计模式
某不知名網友15 小时前
Reactor 模式:高并发网络编程的事件驱动利器
网络·设计模式·php