模式动机
只需要知道某个类的名字就可以得到相应的对象实例。
模式定义
- 简单工厂模式,又称为静态工厂方法模式,属于创建型模式。
- 可以根据参数的不同返回不同类的实例。
- 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式结构图
应用实例
某电视机厂专为各知名电视机品牌代工生产各类电视机,当需要海尔牌电视机时只需要在调用该工厂的工厂方法时传入参数“Haier”,需要海信电视机时只需要传入参数“Hisense”,工厂可以根据传入的不同参数返回不同品牌的电视机。现使用简单工厂模式来模拟该电视机工厂的生产过程。
静态代理实现
TV接口
1 | public interface TV{ |
海尔TV类
1 | public class HaierTV implements TV{ |
海信TV类
1 | public class HisenseTV implements TV{ |
TV工厂类
1 | public class TVFactory { |
XML工具类
1 | public class XMLUtilTV{ |
TV配置文件
1 |
|
客户端测试
1 | public class Client { |
输出结果
- 简单工厂模式优点
- 实现了对象创建和使用的分离
- 客户端无需知道创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可
- 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和新增具体产品类,提高了系统的灵活性
- 简单工厂模式缺点
- 集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都会受到影响
- 增加了系统中类的个数(引入了新的工厂类),让系统变得复杂了
- 系统扩展困难,一旦添加新产品,不得不修改工厂逻辑
- 由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,工厂类不能得到很好的扩展
- 适用范围
- 工厂类负责创建的对象比较少
- 客户端只知道传入工厂类的参数,对于如何创建对象不关心