设计模式[2]——抽象工厂模式一分钟说清

抽象工厂模式 = "工厂的工厂",专门用来批量生产"一组相关产品",而且这组产品可以随意换"家族"。

举个最经典的例子(UI跨平台):

你要做一个支持 Windows 和 macOS 的 App,需要以下控件:

Button

Checkbox

TextBox

每种控件在 Windows 和 macOS 上长得不一样,但都属于同一"家族"。

不用抽象工厂:

C++if (os == "Windows") {

new WinButton();

new WinCheckbox();

} else {

new MacButton();

new MacCheckbox();

}

用抽象工厂:

C++// 1. 先定义抽象工厂接口(一家工厂能生一整套控件)

class GUIFactory {

public:

virtual Button* createButton() = 0;

virtual Checkbox* createCheckbox() = 0;

};

// 2. 具体工厂(Windows家族、Mac家族)

class WinFactory : public GUIFactory {

Button* createButton() override { return new WinButton(); }

Checkbox* createCheckbox() override { return new WinCheckbox(); }

};

class MacFactory : public GUIFactory {

Button* createButton() override { return new MacButton(); }

Checkbox* createCheckbox() override { return new MacCheckbox(); }

};

// 3. 客户端代码(完全与具体平台解耦)

GUIFactory* factory = (os == "mac") ? new MacFactory() : new WinFactory();

Button* btn = factory->createButton(); // 自动就是对应平台的按钮

Checkbox* chk = factory->createCheckbox(); // 同理

一句话总结(面试金句):

抽象工厂模式就是给"一族相关对象"提供一个创建接口,让你换平台时只换一个工厂就行,完全不用改客户端代码。

记住这张图就行了:

text抽象工厂接口

├── Windows 工厂 → 生产 WinButton + WinCheckbox

└── Mac 工厂 → 生产 MacButton + MacCheckbox

背完这 60 秒,下次面试有人问"抽象工厂和工厂方法的区别",你直接甩:

"工厂方法是一个产品一个工厂,抽象工厂是一族产品一个工厂",直接秒杀。

相关推荐
码匠许师傅12 小时前
【设计模式精讲】15.享元模式(Flyweight)
c++·设计模式·享元模式·uml
事圆则缓13 小时前
Android 常用设计模式速查
android·设计模式
码匠许师傅1 天前
【设计模式精讲】14.外观模式(Facade)
c++·设计模式·uml·外观模式
evans在进步1 天前
Java 常用设计模式(二):装饰器、适配器、责任链、模板方法、策略与观察者
java·开发语言·设计模式
码匠许师傅1 天前
【设计模式精讲】13.装饰器模式(Decorator)
c++·设计模式·uml·装饰器模式
evans在进步2 天前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
字节跳动开源2 天前
VisActor全新图可视化开源项目:VGraph
前端·设计模式·开源
码匠许师傅3 天前
【设计模式精讲】11.桥接模式(Bridge)
c++·设计模式·桥接模式·uml
学习星球3 天前
AI Agent 成本工程实战:从 OpenAI Codex 的 8 个“烧 Token“Bug 学起
人工智能·设计模式·微信小程序
AI人工智能+电脑小能手4 天前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理