意图
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行
解决问题
解决接口得选项问题
何时使用
已经明确不同的条件下创建不同的对象
如何解决
让子类实现工厂接口,返回的也是一个抽象产品。
关键代码
创建过程在子类中进行
优点
- 一个调用者想要创建一个对象,只需要知道对象名称即可。
- 扩展性稿,如果想要增加一个产品,增加工厂类即可。
- 屏蔽产品的具体实现,调用者仅需要关注接口即可。
缺点
每增加一个产品,都要增加一个具体类和对象的实现工厂,使得系统类的个数成倍增加,不但增加了系统的复杂度还增加了系统类之间的依赖。
使用场景
- 日志记录:用户可以选择日志的记录位置。
- 数据库访问:不确定数据库或者数据库发生变化。
注意事项
作为创建类模式,在任何需要生成复杂对象的地方,均可以使用工厂方法模式。复杂的类建议使用工厂,简单的类建议直接通过new的方式完成创建。