设计模式:工厂模式

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

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;
}
相关推荐
小飞悟12 小时前
一打开文章就弹登录框?我忍不了了!
前端·设计模式
Ares-Wang12 小时前
设计模式》》门面模式 适配器模式 区别
设计模式·适配器模式
不修×蝙蝠12 小时前
设计模式深度解析:单例、工厂、适配器与代理模式
单例模式·设计模式·代理模式·适配器模式·工厂
C雨后彩虹12 小时前
行为模式-策略模式
java·设计模式·策略模式
玩代码12 小时前
模板方法设计模式
java·开发语言·设计模式·模板方法设计模式
画船听雨眠aa18 小时前
23种设计模式--#2单例模式
单例模式·设计模式
饕餮争锋20 小时前
设计模式笔记_结构型_桥接模式
笔记·设计模式·桥接模式
我爱吃菠 菜20 小时前
手撕设计模式之消息推送系统——桥接模式
java·设计模式·桥接模式
vvilkim20 小时前
深入理解设计模式:命令模式详解
设计模式·命令模式
DKPT1 天前
Java行为型模式(状态模式)实现方式与测试方法
java·笔记·学习·设计模式·状态模式