首页 文章 精选 留言 我的

精选列表

搜索[语言切换],共10012篇文章
优秀的个人博客,低调大师

实现Android主流网络框架封装,可无缝侵入切换框架

一、什么是“有多种可替代解决方案的业务逻辑”? 举几个例子说明: 客户端的http请求操作,可以实现的方案有Retrofix、OkHttp、Volley等; 客户端的数据库存储方案可以为Realm、greenDao、OrmLite等; 图片加载的方案可以是Fresco、Glide、Picasso、UIL等。 二、如何快速替换? 先来描述一下需求,比如说,目前正在用的http请求是Volley,现在发现使用OkHttp来封装一套会更好。又比方说,目前正在用的数据存储方案是OrmLite,现在使用greenDao或者Realm会更好,在类似这些情况下,如何做到不修改Activity/Fragment/Presenter代码的情况下,把Volley的http请求实现更换成Okhttp的实现,把OrmLite更换成greenDao或者Realm? 解决问题的关键词:设计模式中的——工厂方法模式。 本质:利用接口进行解耦。 说到这里,可能很多有经验的朋友已经会心一笑,是的,老实说这篇文章可能对老司机没有太大的意义,但是如果看到这里还是心存疑问,或者你不知道什么是工厂方法模式,也不知道如何使用接口解耦什么的,没关系,请继续往下看。 三、Talk is cheap, show me the code. 下面,我们就用Volley更换到OkHttp这个例子来说明一下如何做到不修改Activity/Fragment/Presenter的代码情况下,更快地更换业务逻辑实现的代码。 在开始之前先来思考一下上述所说“可替代解决方案”的含义,为何这些方案是可替代的?是因为它们具有相同的共性,它们所要解决的问题是相同的,比如说http请求框架,无论是Volley/OkHttp/Retrofix,它们所要实现的都是http请求中的get/post/put/delete这些方法,数据库存储框架中无论是Realm/greenDao/OrmLite,它们要实现的都是增删改查这些方法。 “博主你别再瞎逼逼,赶紧说重点…” 我:dalao我错了,下面说重点… 先来概括一下我们的实现思路: 把http请求框架的共性方法抽取到接口中,我们把这个接口称为“请求接口”; 创建一个用于返回请求结果的接口,我们把这个接口称为“回调接口”; 分别用Volley和OkHttp实现“请求接口”; 创建一个类来返回上述接口的对象,我们把这个类叫做“工厂”类; 在Activity/Fragment/Presenter中,使用“工厂”返回的这个接口对象调用get/post/put/delete方法,并在“回调接口”中得到请求结果。 本文完整代码 https://github.com/AweiLoveAndroid/HttpRequestProcessor,可以先clone到本地再看文章,为了方便阅读,下文中的代码将省略非重点部分。 四、具体步骤: Step1:把http请求框架的共性方法抽取到接口中(也就是上述说的get/post/put/delete这些方法) 上面的IRequestManager接口中用到的请求结果回调接口——IRequestCallback 至此,我们已经把数据请求的接口,以及数据返回的接口都定义好了,整理一下思绪 ● 1.首先我们搞清楚http请求,有哪些方法,需要有哪些参数——IRequestManager; ● 2.数据返回会有什么情况?——IRequestCallback; Step2:用Volley来实现IRequestManager这个接口 VolleyRequestManager实现了IRequestManager接口,到这里我想你也看出来可以使用VolleyRequestManager来进行get/post/put/delete操作了,是的,已经可以用于请求操作,但是我们先不这样做,原因请继续往下看Step3。 Step3:创建一个类来返回IRequestManager请求接口的对象 到这里,请容许我再逼逼一下,为什么要用这种方法来返回对象,而不直接在Activity/Fragment/Presenter中创建VolleyRequestManager对象来进行操作?如果直接在Activity/Fragment/Presenter中使用VolleyRequestManager来创建对象,你的代码就依赖了VolleyRequestManager,这种情况下,如果要更换成OkHttp,岂不是要把代码中所有的VolleyRequestManager对象也更换成OkHttp的请求对象?再试想一下,如果你有很多个Activity/Fragment/Presenter使用了VolleyRequestManager对象,你是不是要每个地方都更换一遍? 使用RequestFactory的方式在Activity/Fragment/Presenter中创建对象,代码只依赖了IRequestManager这个接口,这就是使用接口进行解耦的关键点,无论在什么地方使用了这个接口,当要更换实现的时候,只需要修改RequestFactory中return的实现类就可以了。 Step4:调用上述方法进行测试 注意我们创建请求对象的代码,这里没有出现具体的实现类: IRequestManager requestManager = RequestFactory.getRequestManager(); Step5:不更改MainActivity中任何代码,把Http请求的逻辑替换成OkHttp来实现 1)先用OkHttp来实现IRequestManager这个接口. 2) 使用OkHttp更换Volley 现在我们用OkHttp的请求方式也实现了一套get/post/put/delete的请求方法,此时只要修改Step3中,返回的对象为OkHttpRequestManager对象,就已经完成了我们整个http请求框架的更换,此时,你可以完全移除Volley的引用以及代码,而不会对程序有任何影响。 总结: 对于有多种可替代解决方案的业务逻辑,我的解耦思路是这样的: 1. 抽取它们的共性方法到接口中; 2. 使用自己选择的实现方案去实现; 3. 使用“工厂”类把具体实现转换成抽象接口,并返回抽象接口对象; 4. Activity/Fragment/Presenter中,使用“工厂”中返回的接口进行操作,而不要依赖于其实现类。 5. 要更换方案的时候,只需要修改“工厂”中返回的实现类。 后记: 这篇文章只是提供一种解耦思想,而不是“如何封装http请求框架”的教程,也不是讨论“哪个http请求框架好用”的文章,当然,你完全可以用这种方法进行http请求的封装。欢迎大家提出宝贵意见。 我在原作者的基础上加了另一种和实现方式,这是github地址 可以去下载看看 我写的 网络请求隔离框架github下载地址 引用原文网址:对于有多种可替代解决方案的业务逻辑,提供一种快速更换的思路 【好消息】我的微信公众号正式开通了,关注一下吧! 关注一下我的公众号吧

优秀的个人博客,低调大师

模型切换与 Max 模式:省钱与出活的两手准备

AI 工具最让人纠结的一点是模型绑定:这个月最强的模型,下个月可能就被超越了,如果工具把用户锁死在单一模型上,工作流就得跟着模型迭代搬家。WorkBuddy 的做法是打开输入框的「自动」菜单——一长排模型直接铺开:GLM-5.2、Kimi-K2.7-Code、MiniMax-M3、Deepseek-V4 的 Pro 和 Flash,还有限时免费的预览模型,每个都标了推理档位(High 还是 Medium)和大致单价。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册