简单工厂模式
使用一个工厂对象生产同一等级结构中的任意产品 (不支持拓展增加产品)
基本概念
Simple Factory Pattern: Create an object without exposing the instantiation logic to the client. (It is not treated as a standard design pattern in the GoF’s famous book, but the approach is common to any application)
优点
- “简单粗暴”,可以实例化任何产品类。
缺点
- 当所要生产产品种类非常多时,工厂方法的代码量可能会很庞大。
- 对于增加新的产品,无能为力。因为增加新产品只能通过修改工厂方法来实现。
工厂模式
使用多个工厂对象生产同一等级结构中对应的固定产品 (支持拓展增加产品)
- 对象创建的延迟到子类,强调继承,每个子类都负责创建自己特定类型的对象。
基本概念
Factory Method Pattern: (GoF Definition) Define an interface for creating an object, but let subclasses decide which class to instantiate.
- 减轻了工厂类的负担,把某一类东西交由一个工厂生产。
- 增加某一类东西并不需要修改工厂类,只需要添加生产这类 的工厂即可,使得工厂类符合 “开放 - 封闭”(对拓展开放,对修改关闭)原则。
具体应用
The static
getInstance()
method of the java.text.NumberFormat class- 用于创建
NumberFormat
对象,客户端代码无需了解对象的创建细节
Java 国际化(Internationalization,缩写 i18n)和本地化(Localization,缩写 l10n)的一部分,根据不同的地区和语言习惯来格式化和显示数字。
抽象工厂模式
使用多个工厂对象生产不同产品族的全部产品(不支持拓展增加产品、支持增加产品族)
- 强调对象的组合,不关心具体的工厂类和对象创建过程。
基本概念
Abstract Factory Pattern: (GoF Definition) Provide an interface for creating families of related or dependent objects without specifying their concrete classes.