c++之抽象工厂模式
发布日期:2021-09-25 21:40:49 浏览次数:18 分类:技术文章

本文共 1969 字,大约阅读时间需要 6 分钟。

抽象工厂模式和工厂方法模式类似,因此也被称为工厂家族模式,属于创建型设计模式。

定义:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。

以下的例子说明:

市场上有神奇公司和希望公司,他们同时可以生产鼠标和电池,但是两个公司的鼠标和电池型号却是不一样的。

IMouseProduct(抽象鼠标产品)

IBatteryProduct(抽象电池产品)

-----------------------------------------------------------------

MagicBattery(神奇公司具体电池产品)

MagicMouse(神奇公司具体鼠标产品)

HopeBattery(希望公司具体电池产品)

HopeMouse(希望公司具体鼠标产品)

---------------------------------------------------------------

IFactory(抽象工厂)

MagicFactory(神奇公司工厂-生产神奇鼠标和电池)

HopeFactory(希望公司工厂-生产希望鼠标和电池)

代码:

#include 
using namespace std;//抽象鼠标class IMouseProduct{public: virtual void createMouse() = 0;};//抽象电池class IBatteryProduct{public: virtual void createBattery() = 0;};//神奇公司电池class MagicBattery :public IBatteryProduct{public: virtual void createBattery(){ cout << "生产神奇电池" << endl; }};//神奇公司鼠标class MagicMouse :public IMouseProduct{public: virtual void createMouse(){ cout << "生产神奇鼠标" << endl; }};//希望公司电池class HopeBattery :public IBatteryProduct{public: virtual void createBattery(){ cout << "生产希望电池" << endl; }};//希望公司鼠标class HopeMouse :public IMouseProduct{public: virtual void createMouse(){ cout << "生产希望鼠标" << endl; }};//抽象工厂 class IFactory{public: virtual IMouseProduct *createMouseProuct() = 0; virtual IBatteryProduct *createBatteryProduct() = 0;};//神奇工厂 生产鼠标和键盘class MagicFactory :public IFactory{public: virtual IMouseProduct *createMouseProuct() { return new MagicMouse; } virtual IBatteryProduct *createBatteryProduct() { return new MagicBattery; }};//希望工厂 生产鼠标和键盘class HopeFactory :public IFactory{public: virtual IMouseProduct *createMouseProuct() { return new HopeMouse; } virtual IBatteryProduct *createBatteryProduct() { return new HopeBattery; }};//客户端int main(){ //神奇工厂 //IFactory *fac = new MagicFactory; //希望工厂 IFactory *fac = new HopeFactory; if (fac) { fac->createBatteryProduct()->createBattery(); fac->createMouseProuct()->createMouse(); delete fac; fac = nullptr; } return 0;}

可以看到在客户端中,只需要实例化对应的具体工厂对象给IFactory即可生产不同的产品,不需要改变其他的代码。

转载地址:https://blog.csdn.net/c_shell_python/article/details/107340403 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c++之策略模式
下一篇:c++之工厂方法模式

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月16日 02时31分44秒