定义:
定义一个工厂类,它能够根据参数的不一样生成对应的类的实例;被建立的类的实例一般有相同的父类。由于该工厂方法尝尝是静态的,因此又被称为静态工厂方法(Static Factory Method)java
结构图:
git
- Factory:工厂类,工厂模式的核心。负责建立全部产品实例的内部逻辑,被外界直接调用,返回抽象类Product.
- Product:抽象产品类,封装了各类产品的公有方法,利于提升系统的可扩展性。
- ConcreteProduct:具体产品类,工厂建立目标。继承或实现了抽象产品类的抽象方法,含有具体产品功能的执行逻辑。
注意:github
- 传统状况下客户端会直接调用工厂类的静态方法,并指定对应的参数。若是须要更改对应的产品,则须要从新变音。所以能够考虑引入配置文件来指定具体产品类。
- 有时为了简化,能够将抽象产品类和工厂类合并,在抽象产品类中实现静态工厂方法。
优势:3d
- 工厂类将对象的建立和使用分类开来,符合了单一职责原则。
- 客户端无序知道具体产品的类名,只须要知道具体产品类对应的参数便可,隐藏了具体产品建立的细节。
- 经过配置文件,能够在不修改客户端代码的状况下更换和增长新的具体产品类。
缺点:对象
- 工厂类集中了全部的具体产品建立的职责,一旦不能使用,整个系统将没法使用。
- 若是添加新类,则须要修改工厂类,当产品类型多时,不利于整个系统的扩展和维护。
- 使用了静态方法,形成工厂角色没法造成基于继承的等级结构。
适用场景:blog
- 具体产品类的数目比较少,建立逻辑比较简单。
- 客户端只须要知道传入工厂的参数,对于如何建立对象并不关心。
实例:
继承
SimpleFactoryPattern.javaget