Retrofit 中用到的设计模式以及Retrofit的类图结构
2017-09-28 15:42:55 0 举报
Retrofit的设计类图,完成,有待改进。
作者其他创作
大纲/内容
Android
Client
Product B
+ invoke()
Product A
外观模式:retrofit的所有操作都交给Retrofit的类来操作,不与其他的类进行操作。
具体工厂模式:在构造CallAdapter的时候,使用了工厂模式。
建造者模式:在实例化Retrofit类的时候,使用建造者模式,并不是标准的建造者模式。
ExceptionCatchingRequestBody extends ResponseBody
Utils
-...~...
CallAdapter.Factory
基本模型
Retrofit.Builder
-Platform -okhttp3.Call.Factory callFactory;-HttpUrl baseUrl;-List-List-Executor callbackExecutor;-boolean validateEagerly;
+Builder():构造方法+client(OkHttpClient):Builder+callFactory(okhttp3.Call.Factory):Builder+baseUrl(String):Builder+baseUrl(HttpUrl):Builder+addConverterFactory(Convert.Factory):Builder+addCallAdapterFactory(CallAdapter.Factory):Builder+callbackExecutor(Executor):Builder+validateEagerly(boolean):Builder+build():Retrofit
Factory
- ProductA- ProductB- ProductC
+ getProduct()
具体工厂模式
Interface抽象Factory
+getProduct()
RequestBuilder
Factory C
+ getProduct()- createProduct()
Interface 抽象product
+ invoke()
RealSubject
+ invoke()...
BuildInConverts
+invoke()...
+convert(F):T
Response
- okhttp3.Response: rawResponse- T : body- ResponseBody:responseBody
Retrofit
+create(Class):T+其他获取参数的方法+newBuilder():Builder
Facade
Call
+execute(): Response+enqueue(Callback) : void+isExecuted() : boolean+cancel() : void+isCanceled: boolean+clone() : Call+request() : Request
-baseUrl...
+build...
Callback
Retrofit 结构图
标准静态代理模式
NoContentResponseBody extends ResponseBody
代理模式:在Retrofit的create(Class calzz)的方法中,使用代理模式进行后面的请求操作
Platform
-Platform
+get():Platform-findPlatform():Platform~defaultCallbackExecutor():null~defaultCallAdapterFactory(Executor):CallAdapter.Factory~isDefaultMethod(Method):boolean~invokeDefaultMethod():object
- RealSubject- Proxy- InvocationHandler
Interface 代理类subject
标准动态代理模式
Java
OkHttpCall
+ Factory
Factory B
+ getProduct()-createProduct()
+invoke()....
+responseType(): Type+adapt(Call): T
Product C
ProxySubject
-RealSubject
ParameterHandler
很多个类
client
抽象工厂模式:在构造ConvertAdapter的时候,使用了该模式
+create...
Converter.Factory
简单工厂模式:在构造Platform的过程中使用简单工厂模式。
Factory A
+getProduct()-creatProduct()
0 条评论
下一页