博客
关于我
【创建型模式】工厂模式
阅读量:681 次
发布时间:2019-03-17

本文共 1162 字,大约阅读时间需要 3 分钟。

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它为创建对象提供了一种更好的方式。工厂模式通过间接引用(通过接口)简化了对象的创建过程,使得调用者无需关心对象的具体实现细节,这是一种非常Flexble的设计方案。

核心概念

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个具体的工厂类。通过这种方式,工厂模式将创建逻辑推迟到子类执行。

主要解决问题:如何在不同的条件下创建不同类型的对象。工厂模式特别适用于需要基于某些条件动态创建对象的情况。

何时使用:需要根据不同的需求或者条件来选择不同的实例时。例如,不同数据库类型(如MySQL、PostgreSQL)的数据库连接要求不同的配置,这时就需要使用工厂模式来控制对象的创建。

如何解决:让针对具体产品的类实现一个共同的工厂接口,然后返回唯一的产品实例。具体的创建逻辑由工厂类的实现来决定。

关键代码:创建对象的逻辑存在于工厂类中,而不是直接在调用者端点实现。这使得系统的扩展性更高,同时也使得任何具体的产品类都无需直接参考具体的工厂实现。

优缺点对比

优点

  • 调用者仅需知道产品的名称就能获取相应对象的实例,这简化了调用者的心关注点。
  • 系统的灵活性和扩展性很高,只需添加一个新的工厂类即可支持新的产品类型。
  • 调用者仅关注产品的接口而不关心其具体实现方式,这有助于减少系统的耦合度。
  • 缺点

  • 随着时间的推移,每个新增的产品类型需要增加一个完全新的具体工厂类,导致系统的代码量迅速膨胀。
  • 系统的复杂性增加,特别是当你需要支持成百上千种不同的产品类型时,系统的难以维护和扩展。
  • 实际应用场景

    日志记录器:记录日志可以输出到本地文件、系统事件、远程服务器等不同位置。工厂模式可以让记录系统支持多种日志输出方式,而不会暴露这些选择的逻辑。

    数据库连接:不同的数据库系统可能有不同的配置和连接方式(如MySQL、PostgreSQL等),工厂模式可以用来根据服务器配置自动选择合适的数据库连接类型。

    多线程服务器:如果你需要支持多种协议(如POP3、IMAP、HTTP等),工厂模式可以让你定义一个公共接口,并让各个协议类型的具体实现通过不同的工厂类来创建所需的连接对象。

    注意事项

    工厂模式适用于需要频繁创建复杂对象的场景。然而,过度使用工厂模式可能导致系统的复杂性增加,因此需要根据具体的项目需求来选择合适的模式。

    在代码实现中,通常需要注意以下几点:

  • Each concrete factory class 实现工厂接口并提供特定产品类型的对象。
  • Web应用程序中常常会因为多线程或多人同时访问而导致并发问题,需要合理设计线程安全机制。
  • 定义好工厂接口的签名,确保所有的子类都必须实现这个接口才能工作。
  • 转载地址:http://xcchz.baihongyu.com/

    你可能感兴趣的文章
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>