在软件开发中,对象创建是一个基础且频繁的操作。当对象的创建逻辑变得复杂、需要根据条件动态创建,或者我们希望将创建过程与使用过程解耦时,直接使用 new 关键字可能会带来代码的僵化、难以维护和扩展。此时,工厂模式(Factory Pattern)作为一种经典的设计模式,便闪耀登场,为我们提供了一种优雅的解决方案。
工厂模式属于创建型设计模式。其核心思想是:定义一个用于创建对象的接口(或抽象类),但将具体创建哪个类实例的决定推迟到子类(或具体工厂)中。这样,客户端代码就不再需要直接关心具体对象的实例化细节,只需与工厂接口和抽象产品交互,从而实现了创建逻辑与使用逻辑的解耦。
简单来说,就是将 new 这个动作封装起来,由一个专门的“工厂”来负责生产“产品”。
工厂模式主要分为三种形态:简单工厂模式、工厂方法模式和抽象工厂模式。它们层层递进,应对不同复杂度的场景。
1. 简单工厂模式(Simple Factory)
简单工厂模式并不属于GoF的23种设计模式,但它是理解工厂模式的基础。它通过一个单独的工厂类,根据传入的参数,动态决定创建哪一种产品类的实例。
if-else 或 switch 分支),这违反了“开闭原则”。示例:一个图形绘制程序,根据传入的“圆形”、“矩形”等字符串,创建对应的 Circle 或 Rectangle 对象。
2. 工厂方法模式(Factory Method)
这是工厂模式的标准形态。它定义了一个创建对象的抽象方法,由子类决定实例化的具体类。工厂方法模式将对象的实例化推迟到子类。
示例:日志记录器框架。定义 Logger 抽象产品和 LoggerFactory 抽象工厂。可以有 FileLoggerFactory 生产 FileLogger,DatabaseLoggerFactory 生产 DatabaseLogger。客户端通过 LoggerFactory 接口获取日志器,不关心具体的实现。
3. 抽象工厂模式(Abstract Factory)
抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它处理的是“产品族”的创建。
示例:跨平台GUI工具包。有 Button 和 Checkbox 两个抽象产品。WinFactory 能创建 WinButton 和 WinCheckbox,MacFactory 能创建 MacButton 和 MacCheckbox。应用程序只需绑定一个具体工厂(如 MacFactory),就能获得风格一致的一整套UI组件。
在实践中,选择哪种工厂模式取决于业务的复杂度:
###
工厂模式不仅仅是“不要用 new”的教条,其背后蕴含的是依赖倒置和面向接口编程的深刻思想。它通过将具体类的实例化延迟,赋予了程序更大的灵活性和可扩展性,是构建高内聚、低耦合软件系统的利器。理解并善用工厂模式,是迈向高级软件工程师的重要一步。
如若转载,请注明出处:http://www.1qiyingkeji.com/product/51.html
更新时间:2026-01-13 15:20:42