抽象工厂模式通过定义创建产品族的接口来确保相关对象的一致性。它声明抽象工厂接口,为每类产品提供创建方法,由具体工厂实现并返回配套的具体产品,客户端仅依赖抽象层,从而隔离变化、保证协同。

抽象工厂模式通过定义一个创建一系列相关或相互依赖对象的接口,而不指定它们具体的类,来创建产品族对象。
定义抽象工厂接口
抽象工厂是一个接口或抽象类,声明一组创建同族不同产品的方法。每个方法对应一种产品类型,返回对应的具体产品实例。
- 比如产品族包含“按钮”和“文本框”,就声明 createButton() 和 createTextBox() 方法
- 返回类型是各自产品的抽象类型(如 Button、TextBox),不是具体实现类
- 不关心具体怎么创建,只约定“能产出这一族的哪些东西”
为每个产品族实现具体工厂
每种风格或平台对应一个具体工厂类,实现抽象工厂接口,并在每个方法中返回该风格下的具体产品。
- 例如 WindowsFactory 实现抽象工厂,其 createButton() 返回 WindowsButton,createTextBox() 返回 WindowsTextBox
- 同理,MacFactory 返回 MacButton 和 MacTextBox
- 所有产品类需继承/实现对应抽象产品(如 Button、TextBox),保证类型兼容
客户端使用时只依赖抽象层
客户端代码持有抽象工厂引用,调用其方法获取抽象产品,完全不知道也不需要知道具体类名。
- 初始化时根据配置或运行环境选择具体工厂(如 new WindowsFactory() 或 new MacFactory())
- 后续统一调用 factory.createButton() 等方法,得到配套的一组对象
- 这样新增产品族(如 Linux 风格)只需加新工厂和对应产品类,不修改客户端
关键点:产品间的约束关系由工厂保障
抽象工厂的核心价值在于确保同一工厂创建的产品能协同工作——比如 Windows 按钮和 Windows 文本框共用相同的字体、边距、事件响应逻辑。
- 这种一致性不由客户端维护,而是由具体工厂内部决定
- 如果直接 new 各种具体类,很容易混搭(如 WindowsButton + MacTextBox),导致 UI 不一致或行为异常
- 抽象工厂把“搭配规则”封装在工厂实现里,客户端无需操心
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











