欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 设计模式:工厂模式

设计模式:工厂模式

2025/2/25 2:14:28 来源:https://blog.csdn.net/HR_Reborn/article/details/139525970  浏览:    关键词:设计模式:工厂模式

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

#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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词