Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(三)
抽象工厂模式:就像快餐店的套餐,汉堡+薯条+饮料,不同套餐有不同的组合,但都满足套餐的需求。Room里的SupportSQLiteOpenHelper就像这个套餐接口,不同的具体实现就像不同的套餐选择。比如,你可能选择原生SQLite数据库(开宝马)或者内存数据库(骑自行车),但调用方式都一样,就像点餐一样简单。
问题: 如果没有抽象工厂模式,直接用具体类,会有什么问题?
答案:就像餐馆不提供套餐,每次点餐都要单独点菜,还得自己搭配。代码会变得耦合,难以扩展和维护。Room的抽象工厂模式让不同数据库实现像换轮胎一样方便,互不干扰,各司其职。
前面两篇文章,我们一起学习了,Room引入的背景、Room的使用方式、Room的实现原理猜想验证、Room的源码原理探索总结。
本文,我们将其中牵扯到的课外知识点 or 过程中没有说到的知识点,进行一下单独的总结。
题外话:扩展知识点总结
1. 抽象工厂的设计模式应用
在源码探索的过程中,大家是否发现了这样一个类。
public interface SupportSQLiteOpenHelper extends Closeable {String getDatabaseName();void setWriteAheadLoggingEnabled(<