简单工厂、工厂方法与抽象工厂之间的区别
设计模式是解决常见问题的最佳实践。工厂模式系列(简单工厂、工厂方法、抽象工厂)作为创建型设计模式,它们在对象的创建和管理上扮演着重要角色。接下来,我们将深入探讨这三种工厂模式之间的区别。
1、简单工厂(Simple Factory)
1.1 定义
简单工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。通过定义一个工厂类,根据传入的参数或类型信息来创建不同类的实例。
1.2 特点
- 集中创建逻辑:将所有实例的创建逻辑封装在一个工厂类中。
- 易于使用:客户端只需传入参数即可获取所需的对象,无需知道对象的创建细节。
- 扩展性差:当需要增加新的产品时,需要修改工厂类的代码,违反了开闭原则。
1.3 示例场景
- 简单的日志记录器,根据配置的不同创建不同类型的日志记录器实例。
- 根据不同的用户类型创建不同的用户对象。
2、工厂方法(Factory Method)
2.1 定义
工厂方法模式是对简单工厂模式的进一步抽象和改进。它定义一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。
2.2 特点
- 符合开闭原则:当需要增加新的产品时,只需增加新的具体产品类和相应的工厂子类,无需修改原有的工厂接口或工厂类。
- 解耦:将对象的创建与使用分离,降低了系统的耦合度。
- 灵活性:可以根据不同的需要创建不同的产品实例。
2.3 示例场景
- 多种数据库连接对象的创建,每种数据库对应一个工厂子类。
- 游戏中的不同角色创建,每种角色对应一个工厂子类。
3、抽象工厂(Abstract Factory)
3.1 定义
抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
3.2 特点
- 产品族:抽象工厂模式关注的是产品族(即一组具有相同主题或目的的产品),而不是单个产品。
- 增加产品族容易:当需要增加新的产品族时,只需增加新的抽象工厂和相应的具体工厂类,原有代码无需修改。
- 增加新产品难:如果需要在一个产品族中增加新的产品,则需要在所有的具体工厂类中增加相应的创建逻辑,可能会违反开闭原则。
3.3 示例场景
- 跨平台的UI组件创建,如Windows和Mac平台的按钮、文本框等。
- 游戏中的不同场景创建,每个场景包含多个相关的游戏对象(如敌人、道具等)。