工厂模式 —— mybatis

本文探讨了工厂方法模式在MyBatis框架中的应用,通过示例解释了如何使用工厂创建ObjectWrapper和Transaction对象。阐述了工厂模式在解耦、增强扩展性和提高代码可读性等方面的作用,并指出在消费者不关心产品类的情况下,工厂模式是理想选择。此外,还提及了工厂模式结合反射的使用,以减少具体工厂实现类的创建和维护。

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

1、工厂方法模式

        工厂方法模式: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到它的子类.

        示例1:

        这里定义了一个 ObjectWrapper 的创建接口 ObjectWrapperFactory ,通过该接口的具体实现类去创建具体的 ObjectWrapper 子类对象.做到了对扩展的开放,对修改的封闭,满足开放-封闭原则((软件实体类、模块或者函数等等,应该可以扩展,但是不可以修改)规则)精神.

        示例2:

        TransactionFactory 是用于创建 Transaction 的工厂接口,其中最核心的方法是 newTransaction() 方法,它会根据数据库连接或数据源创建 Transaction 对象.

JdbcTransactionFactory 和 ManagedTransactionFactory 是 TransactionFactory 的两个实现类,分别用来创建 JdbcTransaction 对象和 ManagedTransaction 对象.

        工厂方法模式将简单工厂的内部判断逻辑,移动到了客户端代码来进行,在扩展新功能的时候,简单工厂模式要修改工厂类,工厂方法模式是只需要修改客户端.

        模式作用:

        1) 可以一定程度上解耦,消费者和产品实现类隔离开,只依赖产品接口(抽象产品),产品实现类如何改动与消费者完全无关.

        2) 可以一定程度增加扩展性,若增加一个产品实现,只需要实现产品接口,修改工厂创建产品的方法,消费者可以无感知(若消费者不关心具体产品是什么的情况).

        3) 可以一定程度增加代码的封装性、可读性。清楚的代码结构,对于消费者来说很少的代码量,就可以完成很多工作.

        4) 另外,抽象工厂才是实际意义的工厂模式,工厂方法只是抽象工厂的一个比较常见的情况.

        适用场景:

        1) 消费者不关心它所要创建对象的类(产品类)的时候.

        2) 消费者知道它所要创建对象的类(产品类),但不关心如何创建的时候.

        例如:hibernate 里通过 sessionFactory 创建 session、通过代理方式生成 ws 客户端时,通过工厂构建报文中格式化数据的对象.

2、工厂模式 + 反射

        示例1:

        抽象工厂模式: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它的具体类.

        示例2:

        上例是抽象工厂的简化版本(因为这里没有所谓的创建一系列相关或相互依赖的接口),这里通过范型简化了产品的抽象类与具体实现类(这里可以理解为 class 就是一个抽象接口,当 T 被具体化时候的 class 就是具体实现类),通过反射 + 范型减少了具体工厂实现类的创建与维护.

参考:

1、https://baijiahao.baidu.com/s?id=1723461529698148319&wfr=spider&for=pc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值