工厂模式用于创建对象时,有简单工厂,工厂方法、抽象工厂。

  简单工厂:由一个工厂对象决定创建哪个实例的对象。简单工厂适用于创建对象少的场景,客户端只需要传入参数,对于如何创建不用关心。

       缺点:工厂类职责过重,不易于扩展复杂结构的实例对象,不符合开闭原则。

  工厂方法:是指定义一个创建对象的接口,各个不同对象都有分别的工厂类来实现,让实例化这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。

      在工厂方法模式中,用户只需关注创建的

      对象在哪个工厂中,不需知道创建细节,符合开闭原则。

  抽象工厂:是指提供一个创建一系列相关或相互依赖的对象的接口,适合使用与类似于二维的、比较复杂的场景。比如场景可分为产品族、产品等级结构两个维度的场景。

      将两个维度的相关类分别创建接口,并分别实现。每个产品族都需要一个工厂。

      优点:很清晰的描述了这样复杂场景。

      缺点:不符合开闭原则、增加了系统的抽象性与理解难度。(只要不是系统频繁升级,可以不满足开闭原则。比如隔半年、一年

      应用:在JDBC连接数据库时就用到了抽象工厂,之前在每次使用时都要创建数据库连接,每次创建都十分耗费性能,影响业务调用时间。用了之后,它将数据

      库连接创建好之后放到缓存中缓存者,在每次业务调用时只需现取现用。