# 工厂方法模式 ## 背景 使用简单工厂模式,客户端无需负责具体产品的创建,通过工厂方法进行创建,客户端只是使用产品。 但是,如果需要新增产品类型,就需要修改工厂类,如何实现增加新产品而不影响已有代码? 开发一个系统运行日志记录器(Logger),该记录器可以通过多种途径保存系统的运行日志,例如通过文件记录或数据库记录,用户可以通过修改配置文件灵活地更换日志记录方式,也支持新增记录方式,如 socket 记录方式。 ## 定义 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。 工厂方法模式让一个类的实例化延迟到其子类。 ![工厂方法模式](../img/image-5.png) ## 实现 ![工厂方法模式例子](../img/image-6.png) ## 评价 优点 - 符合单一职责原则,每个产品工厂只创建自己的对应的产品 - 符合开闭原则,增加新的产品,无需修改现有工厂类和客户端(客户端可以通过反射或读取配置文件决定使用哪个产品工厂) 缺点 - 应用工厂方法模式需要引入许多新的子类, 代码可能会因此变得更复杂。