从开源框架理解设计模式系列#Factory工厂模式

本文深入探讨工厂模式,解释其概念、为何需要以及如何实现。通过Elasticsearch、dubbo和jdbc中的案例展示其实际运用,并详细分析了其优缺点,指出在扩展性与系统复杂度之间的权衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

what什么是工厂模式

why为什么需要工厂模式

how怎么实现工厂模式

开源框架经典案例

dubbo的工厂模式

jdbc的工厂模式

优缺点对比

优点

确点


what什么是工厂模式

Gof定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

工厂方法模式包含如下角色:

  • Product:抽象产品
  • ConcreteProduct:具体产品
  • Factory:抽象工厂
  • ConcreteFactory:具体工厂

../_images/FactoryMethod.jpg

why为什么需要工厂模式

工厂模式最大的好处是替换new方法,在需要生成对象的地方使用,但是需要慎重考虑。

厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品

       

how怎么实现工厂模式

../_images/loger.jpg

开源框架经典案例

Elasticsearch中QueryBuilder工厂模式

Es中有大量的查询请求体,每个查询请求属性有共性也有差异,因此Es定义了一个QueryBuilders工厂类,返回不同的Builder,具体代码如下,因为太多,这里我只列举一部分。


public final class QueryBuilders {

    private QueryBuilders() {
    }

    /**
     * A query that matches on all documents.
     */
    public static MatchAllQueryBuilder matchAllQuery() {
        return new MatchAllQueryBuilder();
    }

    /**
     * Creates a match query with type "BOOLEAN" for the provided field name and text.
     *
     * @param name The field name.
     * @param text The query text (to be analyzed).
     */
    public static MatchQueryBuilder matchQuery(String name, Object text) {
        return new MatchQueryBuilder(name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值