当前位置: 首页 > 面试题库 >

Android改造设计模式

乐正浩宕
2023-03-14
问题内容

我正在使用Retrofit与我的REST API进行交互,并且想知道是否有人有任何设计建议。

我的应用程序具有以下软件包:

  1. 楷模
  2. 服务
  3. 活动
  4. 碎片

服务 包中包含用于改造的接口。例如:

public interface FooService {
    @FormUrlEncoded
    @POST("foo/do")
    @Headers("Content-Type: application/x-www-form-urlencoded; charset=UTF-8")
    Call<FooBar> do();
}

模型包含…那么,不同的模型。例如, FooBar 。到目前为止一切顺利-正如翻新文档所述。

我创建了一个API类,该类处理Retrofit构建逻辑(Retrofit retrofit = new Retrofit.Builder()等)并公开一个静态字段:Retrofit。然后在我的活动中,我可以按以下方式执行请求:

FooService service = API.retrofit.create(FooService.class);
Call<FooBar> call = service.do();

try {
    retrofit2.Response response = call.execute();
    // ...do stuff...
} catch(IOException) {}

随之而来的是我的问题:将上述内容进一步抽象会更好吗?这样我就不需要到处重复以上内容了吗?例如,类似:

MyOtherFooService service = new  MyOtherFooService();
FooBar fooBar = service.do();

有什么想法吗?建议?


问题答案:

我通常使用具有以下结构的 单例 模式:

首先定义ServiceHelper如下:

public class ServiceHelper {

private static final String ENDPOINT = "http://test.com";

private static OkHttpClient httpClient = new OkHttpClient();
private static ServiceHelper instance = new ServiceHelper();
private IPlusService service;


private ServiceHelper() {

    Retrofit retrofit = createAdapter().build();
    service = retrofit.create(IPlusService.class);
}

public static ServiceHelper getInstance() {
    return instance;
}

private Retrofit.Builder createAdapter() {

    httpClient.setReadTimeout(60, TimeUnit.SECONDS);
    httpClient.setConnectTimeout(60, TimeUnit.SECONDS);
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    httpClient.interceptors().add(interceptor);

    return new Retrofit.Builder()
            .baseUrl(ENDPOINT)
            .client(httpClient)
            .addConverterFactory(GsonConverterFactory.create());
}

public Call<List<CategoryModel>> getAllCategory() {
    return service.getAllCategory();
}

然后将您的所有服务都放入IService(在我的情况下是IPlusService

    public interface IPlusService {
    //@Headers( "Content-Type: application/json" ) in Post method may use this
    @GET("/api/category")
    Call<List<CategoryModel>> getAllCategory();
}

然后在您的活动/片段中按如下所示致电您的 单身人士

ServiceHelper.getInstance().getAllCategory().enqueue(new Callback<List<CategoryModel>>() {
        @Override
        public void onResponse(Response<List<CategoryModel>> response, Retrofit retrofit) {
            processResponse(response);
        }

        @Override
        public void onFailure(Throwable t) {
            processResponse(null);
        }
    });


 类似资料:
  • 我正在使用改装与我的REST API交互,并且想知道是否有人有任何设计建议。 我的应用程序包含以下软件包: 模型 服务 活动 片段 服务包包含了改造的接口。例如: 模型包含。。。嗯,不同的型号。例如,FooBar。到目前为止一切都很好——正如改装文档所示。 我已经创建了一个API类,它处理Retromet构建逻辑(etc),并公开一个静态字段:改装。在我的活动中,我可以按照以下方式执行我的请求:

  • 介绍 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。 建造者模式可以将一个复杂对象的构建与其表

  • 本文向大家介绍javascript设计模式Constructor(构造器)模式,包括了javascript设计模式Constructor(构造器)模式的使用技巧和注意事项,需要的朋友参考一下 Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。Object构造器用于创建特定类型的对象–准备好对象以备使用,同事接收构造器可以使用参数,以在第一次创建对象时,设置成

  • 介绍 构造函数大家都很熟悉了,不过如果你是新手,还是有必要来了解一下什么叫构造函数的。构造函数用于创建特定类型的对象——不仅声明了使用的对象,构造函数还可以接受参数以便第一次创建对象的时候设置对象的成员值。你可以自定义自己的构造函数,然后在里面声明自定义类型对象的属性或方法。 基本用法 在JavaScript里,构造函数通常是认为用来实现实例的,JavaScript没有类的概念,但是有特殊的构造函

  • 本文向大家介绍JavaScript设计模式之建造者模式介绍,包括了JavaScript设计模式之建造者模式介绍的使用技巧和注意事项,需要的朋友参考一下 建造者模式说明 1. 将一个复杂对象的 构造 与它的表示相分离,使同样的创建过程可有不同的表示,这就叫做建造者模式。 2. 面向对象语言中的说明,主要角色: 1>. Builder 这个接口类,定义这个建造者[工人],统一的可操作的行为方式,它表示

  • 我在响应上编码数据。把键放在标题上。现在,当我得到字符串数据时,我可以在观察者上解码。但我想在GsonConverterFactory上做这件事,然后我可以在GSONconverter Factory上解码,并在响应时使用gson数据。我想知道如何在GSonConverter FactoryResponseByConverter中获取标头?